// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: ast.proto

package proto;

public final class Ast {
  private Ast() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * Protobuf enum {@code proto.Language}
   */
  public enum Language
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>UNKNOWN = 0;</code>
     */
    UNKNOWN(0),
    /**
     * <code>PYTHON = 1;</code>
     */
    PYTHON(1),
    /**
     * <code>JAVASCRIPT = 2;</code>
     */
    JAVASCRIPT(2),
    /**
     * <code>RUBY = 3;</code>
     */
    RUBY(3),
    /**
     * <code>JAVA = 4;</code>
     */
    JAVA(4),
    /**
     * <code>PHP = 5;</code>
     */
    PHP(5),
    /**
     * <code>CSHARP = 6;</code>
     */
    CSHARP(6),
    /**
     * <code>CPP = 7;</code>
     */
    CPP(7),
    /**
     * <code>GO = 8;</code>
     */
    GO(8),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>UNKNOWN = 0;</code>
     */
    public static final int UNKNOWN_VALUE = 0;
    /**
     * <code>PYTHON = 1;</code>
     */
    public static final int PYTHON_VALUE = 1;
    /**
     * <code>JAVASCRIPT = 2;</code>
     */
    public static final int JAVASCRIPT_VALUE = 2;
    /**
     * <code>RUBY = 3;</code>
     */
    public static final int RUBY_VALUE = 3;
    /**
     * <code>JAVA = 4;</code>
     */
    public static final int JAVA_VALUE = 4;
    /**
     * <code>PHP = 5;</code>
     */
    public static final int PHP_VALUE = 5;
    /**
     * <code>CSHARP = 6;</code>
     */
    public static final int CSHARP_VALUE = 6;
    /**
     * <code>CPP = 7;</code>
     */
    public static final int CPP_VALUE = 7;
    /**
     * <code>GO = 8;</code>
     */
    public static final int GO_VALUE = 8;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static Language valueOf(int value) {
      return forNumber(value);
    }

    public static Language forNumber(int value) {
      switch (value) {
        case 0: return UNKNOWN;
        case 1: return PYTHON;
        case 2: return JAVASCRIPT;
        case 3: return RUBY;
        case 4: return JAVA;
        case 5: return PHP;
        case 6: return CSHARP;
        case 7: return CPP;
        case 8: return GO;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<Language>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        Language> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<Language>() {
            public Language findValueByNumber(int number) {
              return Language.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return proto.Ast.getDescriptor().getEnumTypes().get(0);
    }

    private static final Language[] VALUES = values();

    public static Language valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      if (desc.getIndex() == -1) {
        return UNRECOGNIZED;
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private Language(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:proto.Language)
  }

  /**
   * Protobuf enum {@code proto.Functionality}
   */
  public enum Functionality
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>UNCLASSIFIED = 0;</code>
     */
    UNCLASSIFIED(0),
    /**
     * <code>SOURCE = 1;</code>
     */
    SOURCE(1),
    /**
     * <code>SINK = 2;</code>
     */
    SINK(2),
    /**
     * <code>DANGER = 3;</code>
     */
    DANGER(3),
    /**
     * <code>PROPAGATE = 4;</code>
     */
    PROPAGATE(4),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>UNCLASSIFIED = 0;</code>
     */
    public static final int UNCLASSIFIED_VALUE = 0;
    /**
     * <code>SOURCE = 1;</code>
     */
    public static final int SOURCE_VALUE = 1;
    /**
     * <code>SINK = 2;</code>
     */
    public static final int SINK_VALUE = 2;
    /**
     * <code>DANGER = 3;</code>
     */
    public static final int DANGER_VALUE = 3;
    /**
     * <code>PROPAGATE = 4;</code>
     */
    public static final int PROPAGATE_VALUE = 4;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static Functionality valueOf(int value) {
      return forNumber(value);
    }

    public static Functionality forNumber(int value) {
      switch (value) {
        case 0: return UNCLASSIFIED;
        case 1: return SOURCE;
        case 2: return SINK;
        case 3: return DANGER;
        case 4: return PROPAGATE;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<Functionality>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        Functionality> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<Functionality>() {
            public Functionality findValueByNumber(int number) {
              return Functionality.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return proto.Ast.getDescriptor().getEnumTypes().get(1);
    }

    private static final Functionality[] VALUES = values();

    public static Functionality valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      if (desc.getIndex() == -1) {
        return UNRECOGNIZED;
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private Functionality(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:proto.Functionality)
  }

  /**
   * <pre>
   **
   * Types of taint sources and sinks
   * http://blogs.grammatech.com/what-is-taint-checking
   * http://web.cs.iastate.edu/~weile/cs513x/2018spring/taintanalysis.pdf
   * https://www.bodden.de/pubs/rab14classifying.pdf
   * </pre>
   *
   * Protobuf enum {@code proto.SourceType}
   */
  public enum SourceType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>SOURCE_UNCLASSIFIED = 0;</code>
     */
    SOURCE_UNCLASSIFIED(0),
    /**
     * <pre>
     * Sources from Susi
     * </pre>
     *
     * <code>SOURCE_ACCOUNT = 1;</code>
     */
    SOURCE_ACCOUNT(1),
    /**
     * <code>SOURCE_BLUETOOTH = 2;</code>
     */
    SOURCE_BLUETOOTH(2),
    /**
     * <code>SOURCE_BROWSER = 3;</code>
     */
    SOURCE_BROWSER(3),
    /**
     * <code>SOURCE_CALENDAR = 4;</code>
     */
    SOURCE_CALENDAR(4),
    /**
     * <code>SOURCE_CONTACT = 5;</code>
     */
    SOURCE_CONTACT(5),
    /**
     * <code>SOURCE_DATABASE = 6;</code>
     */
    SOURCE_DATABASE(6),
    /**
     * <code>SOURCE_FILE = 7;</code>
     */
    SOURCE_FILE(7),
    /**
     * <code>SOURCE_NETWORK = 8;</code>
     */
    SOURCE_NETWORK(8),
    /**
     * <code>SOURCE_NFC = 9;</code>
     */
    SOURCE_NFC(9),
    /**
     * <code>SOURCE_SETTINGS = 10;</code>
     */
    SOURCE_SETTINGS(10),
    /**
     * <code>SOURCE_SYNC = 11;</code>
     */
    SOURCE_SYNC(11),
    /**
     * <code>SOURCE_UNIQUE_IDENTIFIER = 12;</code>
     */
    SOURCE_UNIQUE_IDENTIFIER(12),
    /**
     * <pre>
     * Sources from other sources
     * </pre>
     *
     * <code>SOURCE_ENVIRONMENT = 51;</code>
     */
    SOURCE_ENVIRONMENT(51),
    /**
     * <code>SOURCE_USER_INPUT = 52;</code>
     */
    SOURCE_USER_INPUT(52),
    /**
     * <code>SOURCE_OBFUSCATION = 53;</code>
     */
    SOURCE_OBFUSCATION(53),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>SOURCE_UNCLASSIFIED = 0;</code>
     */
    public static final int SOURCE_UNCLASSIFIED_VALUE = 0;
    /**
     * <pre>
     * Sources from Susi
     * </pre>
     *
     * <code>SOURCE_ACCOUNT = 1;</code>
     */
    public static final int SOURCE_ACCOUNT_VALUE = 1;
    /**
     * <code>SOURCE_BLUETOOTH = 2;</code>
     */
    public static final int SOURCE_BLUETOOTH_VALUE = 2;
    /**
     * <code>SOURCE_BROWSER = 3;</code>
     */
    public static final int SOURCE_BROWSER_VALUE = 3;
    /**
     * <code>SOURCE_CALENDAR = 4;</code>
     */
    public static final int SOURCE_CALENDAR_VALUE = 4;
    /**
     * <code>SOURCE_CONTACT = 5;</code>
     */
    public static final int SOURCE_CONTACT_VALUE = 5;
    /**
     * <code>SOURCE_DATABASE = 6;</code>
     */
    public static final int SOURCE_DATABASE_VALUE = 6;
    /**
     * <code>SOURCE_FILE = 7;</code>
     */
    public static final int SOURCE_FILE_VALUE = 7;
    /**
     * <code>SOURCE_NETWORK = 8;</code>
     */
    public static final int SOURCE_NETWORK_VALUE = 8;
    /**
     * <code>SOURCE_NFC = 9;</code>
     */
    public static final int SOURCE_NFC_VALUE = 9;
    /**
     * <code>SOURCE_SETTINGS = 10;</code>
     */
    public static final int SOURCE_SETTINGS_VALUE = 10;
    /**
     * <code>SOURCE_SYNC = 11;</code>
     */
    public static final int SOURCE_SYNC_VALUE = 11;
    /**
     * <code>SOURCE_UNIQUE_IDENTIFIER = 12;</code>
     */
    public static final int SOURCE_UNIQUE_IDENTIFIER_VALUE = 12;
    /**
     * <pre>
     * Sources from other sources
     * </pre>
     *
     * <code>SOURCE_ENVIRONMENT = 51;</code>
     */
    public static final int SOURCE_ENVIRONMENT_VALUE = 51;
    /**
     * <code>SOURCE_USER_INPUT = 52;</code>
     */
    public static final int SOURCE_USER_INPUT_VALUE = 52;
    /**
     * <code>SOURCE_OBFUSCATION = 53;</code>
     */
    public static final int SOURCE_OBFUSCATION_VALUE = 53;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static SourceType valueOf(int value) {
      return forNumber(value);
    }

    public static SourceType forNumber(int value) {
      switch (value) {
        case 0: return SOURCE_UNCLASSIFIED;
        case 1: return SOURCE_ACCOUNT;
        case 2: return SOURCE_BLUETOOTH;
        case 3: return SOURCE_BROWSER;
        case 4: return SOURCE_CALENDAR;
        case 5: return SOURCE_CONTACT;
        case 6: return SOURCE_DATABASE;
        case 7: return SOURCE_FILE;
        case 8: return SOURCE_NETWORK;
        case 9: return SOURCE_NFC;
        case 10: return SOURCE_SETTINGS;
        case 11: return SOURCE_SYNC;
        case 12: return SOURCE_UNIQUE_IDENTIFIER;
        case 51: return SOURCE_ENVIRONMENT;
        case 52: return SOURCE_USER_INPUT;
        case 53: return SOURCE_OBFUSCATION;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<SourceType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        SourceType> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<SourceType>() {
            public SourceType findValueByNumber(int number) {
              return SourceType.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return proto.Ast.getDescriptor().getEnumTypes().get(2);
    }

    private static final SourceType[] VALUES = values();

    public static SourceType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      if (desc.getIndex() == -1) {
        return UNRECOGNIZED;
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private SourceType(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:proto.SourceType)
  }

  /**
   * Protobuf enum {@code proto.SinkType}
   */
  public enum SinkType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>SINK_UNCLASSIFIED = 0;</code>
     */
    SINK_UNCLASSIFIED(0),
    /**
     * <pre>
     * Sinks from Susi
     * </pre>
     *
     * <code>SINK_ACCOUNT = 1;</code>
     */
    SINK_ACCOUNT(1),
    /**
     * <code>SINK_AUDIO = 2;</code>
     */
    SINK_AUDIO(2),
    /**
     * <code>SINK_BROWSER = 3;</code>
     */
    SINK_BROWSER(3),
    /**
     * <code>SINK_CALENDAR = 4;</code>
     */
    SINK_CALENDAR(4),
    /**
     * <code>SINK_CONTACT = 5;</code>
     */
    SINK_CONTACT(5),
    /**
     * <code>SINK_FILE = 6;</code>
     */
    SINK_FILE(6),
    /**
     * <code>SINK_LOG = 7;</code>
     */
    SINK_LOG(7),
    /**
     * <code>SINK_NETWORK = 8;</code>
     */
    SINK_NETWORK(8),
    /**
     * <code>SINK_NFC = 9;</code>
     */
    SINK_NFC(9),
    /**
     * <code>SINK_PHONE_CONNECTION = 10;</code>
     */
    SINK_PHONE_CONNECTION(10),
    /**
     * <code>SINK_PHONE_STATE = 11;</code>
     */
    SINK_PHONE_STATE(11),
    /**
     * <code>SINK_SMS_MMS = 12;</code>
     */
    SINK_SMS_MMS(12),
    /**
     * <code>SINK_SYNC = 13;</code>
     */
    SINK_SYNC(13),
    /**
     * <code>SINK_SYSTEM = 14;</code>
     */
    SINK_SYSTEM(14),
    /**
     * <code>SINK_VOIP = 15;</code>
     */
    SINK_VOIP(15),
    /**
     * <pre>
     * Sinks from other sources
     * </pre>
     *
     * <code>SINK_CODE_GENERATION = 51;</code>
     */
    SINK_CODE_GENERATION(51),
    /**
     * <code>SINK_PROCESS_OPERATION = 52;</code>
     */
    SINK_PROCESS_OPERATION(52),
    /**
     * <code>SINK_DATABASE = 53;</code>
     */
    SINK_DATABASE(53),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>SINK_UNCLASSIFIED = 0;</code>
     */
    public static final int SINK_UNCLASSIFIED_VALUE = 0;
    /**
     * <pre>
     * Sinks from Susi
     * </pre>
     *
     * <code>SINK_ACCOUNT = 1;</code>
     */
    public static final int SINK_ACCOUNT_VALUE = 1;
    /**
     * <code>SINK_AUDIO = 2;</code>
     */
    public static final int SINK_AUDIO_VALUE = 2;
    /**
     * <code>SINK_BROWSER = 3;</code>
     */
    public static final int SINK_BROWSER_VALUE = 3;
    /**
     * <code>SINK_CALENDAR = 4;</code>
     */
    public static final int SINK_CALENDAR_VALUE = 4;
    /**
     * <code>SINK_CONTACT = 5;</code>
     */
    public static final int SINK_CONTACT_VALUE = 5;
    /**
     * <code>SINK_FILE = 6;</code>
     */
    public static final int SINK_FILE_VALUE = 6;
    /**
     * <code>SINK_LOG = 7;</code>
     */
    public static final int SINK_LOG_VALUE = 7;
    /**
     * <code>SINK_NETWORK = 8;</code>
     */
    public static final int SINK_NETWORK_VALUE = 8;
    /**
     * <code>SINK_NFC = 9;</code>
     */
    public static final int SINK_NFC_VALUE = 9;
    /**
     * <code>SINK_PHONE_CONNECTION = 10;</code>
     */
    public static final int SINK_PHONE_CONNECTION_VALUE = 10;
    /**
     * <code>SINK_PHONE_STATE = 11;</code>
     */
    public static final int SINK_PHONE_STATE_VALUE = 11;
    /**
     * <code>SINK_SMS_MMS = 12;</code>
     */
    public static final int SINK_SMS_MMS_VALUE = 12;
    /**
     * <code>SINK_SYNC = 13;</code>
     */
    public static final int SINK_SYNC_VALUE = 13;
    /**
     * <code>SINK_SYSTEM = 14;</code>
     */
    public static final int SINK_SYSTEM_VALUE = 14;
    /**
     * <code>SINK_VOIP = 15;</code>
     */
    public static final int SINK_VOIP_VALUE = 15;
    /**
     * <pre>
     * Sinks from other sources
     * </pre>
     *
     * <code>SINK_CODE_GENERATION = 51;</code>
     */
    public static final int SINK_CODE_GENERATION_VALUE = 51;
    /**
     * <code>SINK_PROCESS_OPERATION = 52;</code>
     */
    public static final int SINK_PROCESS_OPERATION_VALUE = 52;
    /**
     * <code>SINK_DATABASE = 53;</code>
     */
    public static final int SINK_DATABASE_VALUE = 53;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static SinkType valueOf(int value) {
      return forNumber(value);
    }

    public static SinkType forNumber(int value) {
      switch (value) {
        case 0: return SINK_UNCLASSIFIED;
        case 1: return SINK_ACCOUNT;
        case 2: return SINK_AUDIO;
        case 3: return SINK_BROWSER;
        case 4: return SINK_CALENDAR;
        case 5: return SINK_CONTACT;
        case 6: return SINK_FILE;
        case 7: return SINK_LOG;
        case 8: return SINK_NETWORK;
        case 9: return SINK_NFC;
        case 10: return SINK_PHONE_CONNECTION;
        case 11: return SINK_PHONE_STATE;
        case 12: return SINK_SMS_MMS;
        case 13: return SINK_SYNC;
        case 14: return SINK_SYSTEM;
        case 15: return SINK_VOIP;
        case 51: return SINK_CODE_GENERATION;
        case 52: return SINK_PROCESS_OPERATION;
        case 53: return SINK_DATABASE;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<SinkType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        SinkType> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<SinkType>() {
            public SinkType findValueByNumber(int number) {
              return SinkType.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return proto.Ast.getDescriptor().getEnumTypes().get(3);
    }

    private static final SinkType[] VALUES = values();

    public static SinkType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      if (desc.getIndex() == -1) {
        return UNRECOGNIZED;
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private SinkType(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:proto.SinkType)
  }

  /**
   * Protobuf enum {@code proto.DangerType}
   */
  public enum DangerType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>DANGER_UNCLASSIFIED_DANGER = 0;</code>
     */
    DANGER_UNCLASSIFIED_DANGER(0),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>DANGER_UNCLASSIFIED_DANGER = 0;</code>
     */
    public static final int DANGER_UNCLASSIFIED_DANGER_VALUE = 0;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static DangerType valueOf(int value) {
      return forNumber(value);
    }

    public static DangerType forNumber(int value) {
      switch (value) {
        case 0: return DANGER_UNCLASSIFIED_DANGER;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<DangerType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        DangerType> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<DangerType>() {
            public DangerType findValueByNumber(int number) {
              return DangerType.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return proto.Ast.getDescriptor().getEnumTypes().get(4);
    }

    private static final DangerType[] VALUES = values();

    public static DangerType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      if (desc.getIndex() == -1) {
        return UNRECOGNIZED;
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private DangerType(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:proto.DangerType)
  }

  /**
   * Protobuf enum {@code proto.PropagateType}
   */
  public enum PropagateType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>PROPAGATE_UNCLASSIFIED = 0;</code>
     */
    PROPAGATE_UNCLASSIFIED(0),
    /**
     * <code>PROPAGATE_ASSIGN = 1;</code>
     */
    PROPAGATE_ASSIGN(1),
    /**
     * <pre>
     * Calls can affect the results by return value or reference argument
     * </pre>
     *
     * <code>PROPAGATE_CALL = 2;</code>
     */
    PROPAGATE_CALL(2),
    /**
     * <code>PROPAGATE_SYSCALL = 3;</code>
     */
    PROPAGATE_SYSCALL(3),
    /**
     * <code>PROPAGATE_LIBCALL = 4;</code>
     */
    PROPAGATE_LIBCALL(4),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>PROPAGATE_UNCLASSIFIED = 0;</code>
     */
    public static final int PROPAGATE_UNCLASSIFIED_VALUE = 0;
    /**
     * <code>PROPAGATE_ASSIGN = 1;</code>
     */
    public static final int PROPAGATE_ASSIGN_VALUE = 1;
    /**
     * <pre>
     * Calls can affect the results by return value or reference argument
     * </pre>
     *
     * <code>PROPAGATE_CALL = 2;</code>
     */
    public static final int PROPAGATE_CALL_VALUE = 2;
    /**
     * <code>PROPAGATE_SYSCALL = 3;</code>
     */
    public static final int PROPAGATE_SYSCALL_VALUE = 3;
    /**
     * <code>PROPAGATE_LIBCALL = 4;</code>
     */
    public static final int PROPAGATE_LIBCALL_VALUE = 4;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static PropagateType valueOf(int value) {
      return forNumber(value);
    }

    public static PropagateType forNumber(int value) {
      switch (value) {
        case 0: return PROPAGATE_UNCLASSIFIED;
        case 1: return PROPAGATE_ASSIGN;
        case 2: return PROPAGATE_CALL;
        case 3: return PROPAGATE_SYSCALL;
        case 4: return PROPAGATE_LIBCALL;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<PropagateType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        PropagateType> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<PropagateType>() {
            public PropagateType findValueByNumber(int number) {
              return PropagateType.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return proto.Ast.getDescriptor().getEnumTypes().get(5);
    }

    private static final PropagateType[] VALUES = values();

    public static PropagateType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      if (desc.getIndex() == -1) {
        return UNRECOGNIZED;
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private PropagateType(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:proto.PropagateType)
  }

  public interface FileInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.FileInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * the verbose file name and the relative path with regard to repo root
     * </pre>
     *
     * <code>string filename = 1;</code>
     */
    java.lang.String getFilename();
    /**
     * <pre>
     * the verbose file name and the relative path with regard to repo root
     * </pre>
     *
     * <code>string filename = 1;</code>
     */
    com.google.protobuf.ByteString
        getFilenameBytes();

    /**
     * <code>string relpath = 2;</code>
     */
    java.lang.String getRelpath();
    /**
     * <code>string relpath = 2;</code>
     */
    com.google.protobuf.ByteString
        getRelpathBytes();

    /**
     * <pre>
     * the file and directory specified in compile_commands
     * </pre>
     *
     * <code>string file = 3;</code>
     */
    java.lang.String getFile();
    /**
     * <pre>
     * the file and directory specified in compile_commands
     * </pre>
     *
     * <code>string file = 3;</code>
     */
    com.google.protobuf.ByteString
        getFileBytes();

    /**
     * <code>string directory = 4;</code>
     */
    java.lang.String getDirectory();
    /**
     * <code>string directory = 4;</code>
     */
    com.google.protobuf.ByteString
        getDirectoryBytes();
  }
  /**
   * Protobuf type {@code proto.FileInfo}
   */
  public  static final class FileInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.FileInfo)
      FileInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use FileInfo.newBuilder() to construct.
    private FileInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private FileInfo() {
      filename_ = "";
      relpath_ = "";
      file_ = "";
      directory_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private FileInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              filename_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              relpath_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              file_ = s;
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              directory_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Ast.internal_static_proto_FileInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Ast.internal_static_proto_FileInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Ast.FileInfo.class, proto.Ast.FileInfo.Builder.class);
    }

    public static final int FILENAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object filename_;
    /**
     * <pre>
     * the verbose file name and the relative path with regard to repo root
     * </pre>
     *
     * <code>string filename = 1;</code>
     */
    public java.lang.String getFilename() {
      java.lang.Object ref = filename_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        filename_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * the verbose file name and the relative path with regard to repo root
     * </pre>
     *
     * <code>string filename = 1;</code>
     */
    public com.google.protobuf.ByteString
        getFilenameBytes() {
      java.lang.Object ref = filename_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        filename_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RELPATH_FIELD_NUMBER = 2;
    private volatile java.lang.Object relpath_;
    /**
     * <code>string relpath = 2;</code>
     */
    public java.lang.String getRelpath() {
      java.lang.Object ref = relpath_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        relpath_ = s;
        return s;
      }
    }
    /**
     * <code>string relpath = 2;</code>
     */
    public com.google.protobuf.ByteString
        getRelpathBytes() {
      java.lang.Object ref = relpath_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        relpath_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FILE_FIELD_NUMBER = 3;
    private volatile java.lang.Object file_;
    /**
     * <pre>
     * the file and directory specified in compile_commands
     * </pre>
     *
     * <code>string file = 3;</code>
     */
    public java.lang.String getFile() {
      java.lang.Object ref = file_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        file_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * the file and directory specified in compile_commands
     * </pre>
     *
     * <code>string file = 3;</code>
     */
    public com.google.protobuf.ByteString
        getFileBytes() {
      java.lang.Object ref = file_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        file_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DIRECTORY_FIELD_NUMBER = 4;
    private volatile java.lang.Object directory_;
    /**
     * <code>string directory = 4;</code>
     */
    public java.lang.String getDirectory() {
      java.lang.Object ref = directory_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        directory_ = s;
        return s;
      }
    }
    /**
     * <code>string directory = 4;</code>
     */
    public com.google.protobuf.ByteString
        getDirectoryBytes() {
      java.lang.Object ref = directory_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        directory_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getFilenameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, filename_);
      }
      if (!getRelpathBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, relpath_);
      }
      if (!getFileBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, file_);
      }
      if (!getDirectoryBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, directory_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getFilenameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, filename_);
      }
      if (!getRelpathBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, relpath_);
      }
      if (!getFileBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, file_);
      }
      if (!getDirectoryBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, directory_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof proto.Ast.FileInfo)) {
        return super.equals(obj);
      }
      proto.Ast.FileInfo other = (proto.Ast.FileInfo) obj;

      boolean result = true;
      result = result && getFilename()
          .equals(other.getFilename());
      result = result && getRelpath()
          .equals(other.getRelpath());
      result = result && getFile()
          .equals(other.getFile());
      result = result && getDirectory()
          .equals(other.getDirectory());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + FILENAME_FIELD_NUMBER;
      hash = (53 * hash) + getFilename().hashCode();
      hash = (37 * hash) + RELPATH_FIELD_NUMBER;
      hash = (53 * hash) + getRelpath().hashCode();
      hash = (37 * hash) + FILE_FIELD_NUMBER;
      hash = (53 * hash) + getFile().hashCode();
      hash = (37 * hash) + DIRECTORY_FIELD_NUMBER;
      hash = (53 * hash) + getDirectory().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.Ast.FileInfo parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.FileInfo parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.FileInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.FileInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.FileInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.FileInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.FileInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.FileInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.FileInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.Ast.FileInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.FileInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.FileInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(proto.Ast.FileInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code proto.FileInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.FileInfo)
        proto.Ast.FileInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Ast.internal_static_proto_FileInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Ast.internal_static_proto_FileInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Ast.FileInfo.class, proto.Ast.FileInfo.Builder.class);
      }

      // Construct using proto.Ast.FileInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        filename_ = "";

        relpath_ = "";

        file_ = "";

        directory_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Ast.internal_static_proto_FileInfo_descriptor;
      }

      @java.lang.Override
      public proto.Ast.FileInfo getDefaultInstanceForType() {
        return proto.Ast.FileInfo.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Ast.FileInfo build() {
        proto.Ast.FileInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Ast.FileInfo buildPartial() {
        proto.Ast.FileInfo result = new proto.Ast.FileInfo(this);
        result.filename_ = filename_;
        result.relpath_ = relpath_;
        result.file_ = file_;
        result.directory_ = directory_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof proto.Ast.FileInfo) {
          return mergeFrom((proto.Ast.FileInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Ast.FileInfo other) {
        if (other == proto.Ast.FileInfo.getDefaultInstance()) return this;
        if (!other.getFilename().isEmpty()) {
          filename_ = other.filename_;
          onChanged();
        }
        if (!other.getRelpath().isEmpty()) {
          relpath_ = other.relpath_;
          onChanged();
        }
        if (!other.getFile().isEmpty()) {
          file_ = other.file_;
          onChanged();
        }
        if (!other.getDirectory().isEmpty()) {
          directory_ = other.directory_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        proto.Ast.FileInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Ast.FileInfo) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object filename_ = "";
      /**
       * <pre>
       * the verbose file name and the relative path with regard to repo root
       * </pre>
       *
       * <code>string filename = 1;</code>
       */
      public java.lang.String getFilename() {
        java.lang.Object ref = filename_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          filename_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * the verbose file name and the relative path with regard to repo root
       * </pre>
       *
       * <code>string filename = 1;</code>
       */
      public com.google.protobuf.ByteString
          getFilenameBytes() {
        java.lang.Object ref = filename_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          filename_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * the verbose file name and the relative path with regard to repo root
       * </pre>
       *
       * <code>string filename = 1;</code>
       */
      public Builder setFilename(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        filename_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * the verbose file name and the relative path with regard to repo root
       * </pre>
       *
       * <code>string filename = 1;</code>
       */
      public Builder clearFilename() {
        
        filename_ = getDefaultInstance().getFilename();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * the verbose file name and the relative path with regard to repo root
       * </pre>
       *
       * <code>string filename = 1;</code>
       */
      public Builder setFilenameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        filename_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object relpath_ = "";
      /**
       * <code>string relpath = 2;</code>
       */
      public java.lang.String getRelpath() {
        java.lang.Object ref = relpath_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          relpath_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string relpath = 2;</code>
       */
      public com.google.protobuf.ByteString
          getRelpathBytes() {
        java.lang.Object ref = relpath_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          relpath_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string relpath = 2;</code>
       */
      public Builder setRelpath(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        relpath_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string relpath = 2;</code>
       */
      public Builder clearRelpath() {
        
        relpath_ = getDefaultInstance().getRelpath();
        onChanged();
        return this;
      }
      /**
       * <code>string relpath = 2;</code>
       */
      public Builder setRelpathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        relpath_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object file_ = "";
      /**
       * <pre>
       * the file and directory specified in compile_commands
       * </pre>
       *
       * <code>string file = 3;</code>
       */
      public java.lang.String getFile() {
        java.lang.Object ref = file_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          file_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * the file and directory specified in compile_commands
       * </pre>
       *
       * <code>string file = 3;</code>
       */
      public com.google.protobuf.ByteString
          getFileBytes() {
        java.lang.Object ref = file_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          file_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * the file and directory specified in compile_commands
       * </pre>
       *
       * <code>string file = 3;</code>
       */
      public Builder setFile(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        file_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * the file and directory specified in compile_commands
       * </pre>
       *
       * <code>string file = 3;</code>
       */
      public Builder clearFile() {
        
        file_ = getDefaultInstance().getFile();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * the file and directory specified in compile_commands
       * </pre>
       *
       * <code>string file = 3;</code>
       */
      public Builder setFileBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        file_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object directory_ = "";
      /**
       * <code>string directory = 4;</code>
       */
      public java.lang.String getDirectory() {
        java.lang.Object ref = directory_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          directory_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string directory = 4;</code>
       */
      public com.google.protobuf.ByteString
          getDirectoryBytes() {
        java.lang.Object ref = directory_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          directory_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string directory = 4;</code>
       */
      public Builder setDirectory(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        directory_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string directory = 4;</code>
       */
      public Builder clearDirectory() {
        
        directory_ = getDefaultInstance().getDirectory();
        onChanged();
        return this;
      }
      /**
       * <code>string directory = 4;</code>
       */
      public Builder setDirectoryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        directory_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:proto.FileInfo)
    }

    // @@protoc_insertion_point(class_scope:proto.FileInfo)
    private static final proto.Ast.FileInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Ast.FileInfo();
    }

    public static proto.Ast.FileInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<FileInfo>
        PARSER = new com.google.protobuf.AbstractParser<FileInfo>() {
      @java.lang.Override
      public FileInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new FileInfo(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<FileInfo> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<FileInfo> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public proto.Ast.FileInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SourceLocationOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.SourceLocation)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>int32 row = 1;</code>
     */
    int getRow();

    /**
     * <code>int32 column = 2;</code>
     */
    int getColumn();

    /**
     * <code>.proto.FileInfo file_info = 3;</code>
     */
    boolean hasFileInfo();
    /**
     * <code>.proto.FileInfo file_info = 3;</code>
     */
    proto.Ast.FileInfo getFileInfo();
    /**
     * <code>.proto.FileInfo file_info = 3;</code>
     */
    proto.Ast.FileInfoOrBuilder getFileInfoOrBuilder();
  }
  /**
   * Protobuf type {@code proto.SourceLocation}
   */
  public  static final class SourceLocation extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.SourceLocation)
      SourceLocationOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SourceLocation.newBuilder() to construct.
    private SourceLocation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SourceLocation() {
      row_ = 0;
      column_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SourceLocation(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {

              row_ = input.readInt32();
              break;
            }
            case 16: {

              column_ = input.readInt32();
              break;
            }
            case 26: {
              proto.Ast.FileInfo.Builder subBuilder = null;
              if (fileInfo_ != null) {
                subBuilder = fileInfo_.toBuilder();
              }
              fileInfo_ = input.readMessage(proto.Ast.FileInfo.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(fileInfo_);
                fileInfo_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Ast.internal_static_proto_SourceLocation_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Ast.internal_static_proto_SourceLocation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Ast.SourceLocation.class, proto.Ast.SourceLocation.Builder.class);
    }

    public static final int ROW_FIELD_NUMBER = 1;
    private int row_;
    /**
     * <code>int32 row = 1;</code>
     */
    public int getRow() {
      return row_;
    }

    public static final int COLUMN_FIELD_NUMBER = 2;
    private int column_;
    /**
     * <code>int32 column = 2;</code>
     */
    public int getColumn() {
      return column_;
    }

    public static final int FILE_INFO_FIELD_NUMBER = 3;
    private proto.Ast.FileInfo fileInfo_;
    /**
     * <code>.proto.FileInfo file_info = 3;</code>
     */
    public boolean hasFileInfo() {
      return fileInfo_ != null;
    }
    /**
     * <code>.proto.FileInfo file_info = 3;</code>
     */
    public proto.Ast.FileInfo getFileInfo() {
      return fileInfo_ == null ? proto.Ast.FileInfo.getDefaultInstance() : fileInfo_;
    }
    /**
     * <code>.proto.FileInfo file_info = 3;</code>
     */
    public proto.Ast.FileInfoOrBuilder getFileInfoOrBuilder() {
      return getFileInfo();
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (row_ != 0) {
        output.writeInt32(1, row_);
      }
      if (column_ != 0) {
        output.writeInt32(2, column_);
      }
      if (fileInfo_ != null) {
        output.writeMessage(3, getFileInfo());
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (row_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, row_);
      }
      if (column_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, column_);
      }
      if (fileInfo_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getFileInfo());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof proto.Ast.SourceLocation)) {
        return super.equals(obj);
      }
      proto.Ast.SourceLocation other = (proto.Ast.SourceLocation) obj;

      boolean result = true;
      result = result && (getRow()
          == other.getRow());
      result = result && (getColumn()
          == other.getColumn());
      result = result && (hasFileInfo() == other.hasFileInfo());
      if (hasFileInfo()) {
        result = result && getFileInfo()
            .equals(other.getFileInfo());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + ROW_FIELD_NUMBER;
      hash = (53 * hash) + getRow();
      hash = (37 * hash) + COLUMN_FIELD_NUMBER;
      hash = (53 * hash) + getColumn();
      if (hasFileInfo()) {
        hash = (37 * hash) + FILE_INFO_FIELD_NUMBER;
        hash = (53 * hash) + getFileInfo().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.Ast.SourceLocation parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.SourceLocation parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.SourceLocation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.SourceLocation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.SourceLocation parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.SourceLocation parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.SourceLocation parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.SourceLocation parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.SourceLocation parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.Ast.SourceLocation parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.SourceLocation parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.SourceLocation parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(proto.Ast.SourceLocation prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code proto.SourceLocation}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.SourceLocation)
        proto.Ast.SourceLocationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Ast.internal_static_proto_SourceLocation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Ast.internal_static_proto_SourceLocation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Ast.SourceLocation.class, proto.Ast.SourceLocation.Builder.class);
      }

      // Construct using proto.Ast.SourceLocation.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        row_ = 0;

        column_ = 0;

        if (fileInfoBuilder_ == null) {
          fileInfo_ = null;
        } else {
          fileInfo_ = null;
          fileInfoBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Ast.internal_static_proto_SourceLocation_descriptor;
      }

      @java.lang.Override
      public proto.Ast.SourceLocation getDefaultInstanceForType() {
        return proto.Ast.SourceLocation.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Ast.SourceLocation build() {
        proto.Ast.SourceLocation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Ast.SourceLocation buildPartial() {
        proto.Ast.SourceLocation result = new proto.Ast.SourceLocation(this);
        result.row_ = row_;
        result.column_ = column_;
        if (fileInfoBuilder_ == null) {
          result.fileInfo_ = fileInfo_;
        } else {
          result.fileInfo_ = fileInfoBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof proto.Ast.SourceLocation) {
          return mergeFrom((proto.Ast.SourceLocation)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Ast.SourceLocation other) {
        if (other == proto.Ast.SourceLocation.getDefaultInstance()) return this;
        if (other.getRow() != 0) {
          setRow(other.getRow());
        }
        if (other.getColumn() != 0) {
          setColumn(other.getColumn());
        }
        if (other.hasFileInfo()) {
          mergeFileInfo(other.getFileInfo());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        proto.Ast.SourceLocation parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Ast.SourceLocation) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private int row_ ;
      /**
       * <code>int32 row = 1;</code>
       */
      public int getRow() {
        return row_;
      }
      /**
       * <code>int32 row = 1;</code>
       */
      public Builder setRow(int value) {
        
        row_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 row = 1;</code>
       */
      public Builder clearRow() {
        
        row_ = 0;
        onChanged();
        return this;
      }

      private int column_ ;
      /**
       * <code>int32 column = 2;</code>
       */
      public int getColumn() {
        return column_;
      }
      /**
       * <code>int32 column = 2;</code>
       */
      public Builder setColumn(int value) {
        
        column_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 column = 2;</code>
       */
      public Builder clearColumn() {
        
        column_ = 0;
        onChanged();
        return this;
      }

      private proto.Ast.FileInfo fileInfo_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.FileInfo, proto.Ast.FileInfo.Builder, proto.Ast.FileInfoOrBuilder> fileInfoBuilder_;
      /**
       * <code>.proto.FileInfo file_info = 3;</code>
       */
      public boolean hasFileInfo() {
        return fileInfoBuilder_ != null || fileInfo_ != null;
      }
      /**
       * <code>.proto.FileInfo file_info = 3;</code>
       */
      public proto.Ast.FileInfo getFileInfo() {
        if (fileInfoBuilder_ == null) {
          return fileInfo_ == null ? proto.Ast.FileInfo.getDefaultInstance() : fileInfo_;
        } else {
          return fileInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.FileInfo file_info = 3;</code>
       */
      public Builder setFileInfo(proto.Ast.FileInfo value) {
        if (fileInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          fileInfo_ = value;
          onChanged();
        } else {
          fileInfoBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.FileInfo file_info = 3;</code>
       */
      public Builder setFileInfo(
          proto.Ast.FileInfo.Builder builderForValue) {
        if (fileInfoBuilder_ == null) {
          fileInfo_ = builderForValue.build();
          onChanged();
        } else {
          fileInfoBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.FileInfo file_info = 3;</code>
       */
      public Builder mergeFileInfo(proto.Ast.FileInfo value) {
        if (fileInfoBuilder_ == null) {
          if (fileInfo_ != null) {
            fileInfo_ =
              proto.Ast.FileInfo.newBuilder(fileInfo_).mergeFrom(value).buildPartial();
          } else {
            fileInfo_ = value;
          }
          onChanged();
        } else {
          fileInfoBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.FileInfo file_info = 3;</code>
       */
      public Builder clearFileInfo() {
        if (fileInfoBuilder_ == null) {
          fileInfo_ = null;
          onChanged();
        } else {
          fileInfo_ = null;
          fileInfoBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.FileInfo file_info = 3;</code>
       */
      public proto.Ast.FileInfo.Builder getFileInfoBuilder() {
        
        onChanged();
        return getFileInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.FileInfo file_info = 3;</code>
       */
      public proto.Ast.FileInfoOrBuilder getFileInfoOrBuilder() {
        if (fileInfoBuilder_ != null) {
          return fileInfoBuilder_.getMessageOrBuilder();
        } else {
          return fileInfo_ == null ?
              proto.Ast.FileInfo.getDefaultInstance() : fileInfo_;
        }
      }
      /**
       * <code>.proto.FileInfo file_info = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.FileInfo, proto.Ast.FileInfo.Builder, proto.Ast.FileInfoOrBuilder> 
          getFileInfoFieldBuilder() {
        if (fileInfoBuilder_ == null) {
          fileInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Ast.FileInfo, proto.Ast.FileInfo.Builder, proto.Ast.FileInfoOrBuilder>(
                  getFileInfo(),
                  getParentForChildren(),
                  isClean());
          fileInfo_ = null;
        }
        return fileInfoBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:proto.SourceLocation)
    }

    // @@protoc_insertion_point(class_scope:proto.SourceLocation)
    private static final proto.Ast.SourceLocation DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Ast.SourceLocation();
    }

    public static proto.Ast.SourceLocation getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<SourceLocation>
        PARSER = new com.google.protobuf.AbstractParser<SourceLocation>() {
      @java.lang.Override
      public SourceLocation parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SourceLocation(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SourceLocation> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SourceLocation> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public proto.Ast.SourceLocation getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SourceRangeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.SourceRange)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.proto.SourceLocation start = 1;</code>
     */
    boolean hasStart();
    /**
     * <code>.proto.SourceLocation start = 1;</code>
     */
    proto.Ast.SourceLocation getStart();
    /**
     * <code>.proto.SourceLocation start = 1;</code>
     */
    proto.Ast.SourceLocationOrBuilder getStartOrBuilder();

    /**
     * <code>.proto.SourceLocation end = 2;</code>
     */
    boolean hasEnd();
    /**
     * <code>.proto.SourceLocation end = 2;</code>
     */
    proto.Ast.SourceLocation getEnd();
    /**
     * <code>.proto.SourceLocation end = 2;</code>
     */
    proto.Ast.SourceLocationOrBuilder getEndOrBuilder();
  }
  /**
   * Protobuf type {@code proto.SourceRange}
   */
  public  static final class SourceRange extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.SourceRange)
      SourceRangeOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SourceRange.newBuilder() to construct.
    private SourceRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SourceRange() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SourceRange(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              proto.Ast.SourceLocation.Builder subBuilder = null;
              if (start_ != null) {
                subBuilder = start_.toBuilder();
              }
              start_ = input.readMessage(proto.Ast.SourceLocation.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(start_);
                start_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              proto.Ast.SourceLocation.Builder subBuilder = null;
              if (end_ != null) {
                subBuilder = end_.toBuilder();
              }
              end_ = input.readMessage(proto.Ast.SourceLocation.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(end_);
                end_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Ast.internal_static_proto_SourceRange_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Ast.internal_static_proto_SourceRange_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Ast.SourceRange.class, proto.Ast.SourceRange.Builder.class);
    }

    public static final int START_FIELD_NUMBER = 1;
    private proto.Ast.SourceLocation start_;
    /**
     * <code>.proto.SourceLocation start = 1;</code>
     */
    public boolean hasStart() {
      return start_ != null;
    }
    /**
     * <code>.proto.SourceLocation start = 1;</code>
     */
    public proto.Ast.SourceLocation getStart() {
      return start_ == null ? proto.Ast.SourceLocation.getDefaultInstance() : start_;
    }
    /**
     * <code>.proto.SourceLocation start = 1;</code>
     */
    public proto.Ast.SourceLocationOrBuilder getStartOrBuilder() {
      return getStart();
    }

    public static final int END_FIELD_NUMBER = 2;
    private proto.Ast.SourceLocation end_;
    /**
     * <code>.proto.SourceLocation end = 2;</code>
     */
    public boolean hasEnd() {
      return end_ != null;
    }
    /**
     * <code>.proto.SourceLocation end = 2;</code>
     */
    public proto.Ast.SourceLocation getEnd() {
      return end_ == null ? proto.Ast.SourceLocation.getDefaultInstance() : end_;
    }
    /**
     * <code>.proto.SourceLocation end = 2;</code>
     */
    public proto.Ast.SourceLocationOrBuilder getEndOrBuilder() {
      return getEnd();
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (start_ != null) {
        output.writeMessage(1, getStart());
      }
      if (end_ != null) {
        output.writeMessage(2, getEnd());
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (start_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getStart());
      }
      if (end_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getEnd());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof proto.Ast.SourceRange)) {
        return super.equals(obj);
      }
      proto.Ast.SourceRange other = (proto.Ast.SourceRange) obj;

      boolean result = true;
      result = result && (hasStart() == other.hasStart());
      if (hasStart()) {
        result = result && getStart()
            .equals(other.getStart());
      }
      result = result && (hasEnd() == other.hasEnd());
      if (hasEnd()) {
        result = result && getEnd()
            .equals(other.getEnd());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasStart()) {
        hash = (37 * hash) + START_FIELD_NUMBER;
        hash = (53 * hash) + getStart().hashCode();
      }
      if (hasEnd()) {
        hash = (37 * hash) + END_FIELD_NUMBER;
        hash = (53 * hash) + getEnd().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.Ast.SourceRange parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.SourceRange parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.SourceRange parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.SourceRange parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.SourceRange parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.SourceRange parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.SourceRange parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.SourceRange parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.SourceRange parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.Ast.SourceRange parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.SourceRange parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.SourceRange parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(proto.Ast.SourceRange prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code proto.SourceRange}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.SourceRange)
        proto.Ast.SourceRangeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Ast.internal_static_proto_SourceRange_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Ast.internal_static_proto_SourceRange_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Ast.SourceRange.class, proto.Ast.SourceRange.Builder.class);
      }

      // Construct using proto.Ast.SourceRange.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (startBuilder_ == null) {
          start_ = null;
        } else {
          start_ = null;
          startBuilder_ = null;
        }
        if (endBuilder_ == null) {
          end_ = null;
        } else {
          end_ = null;
          endBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Ast.internal_static_proto_SourceRange_descriptor;
      }

      @java.lang.Override
      public proto.Ast.SourceRange getDefaultInstanceForType() {
        return proto.Ast.SourceRange.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Ast.SourceRange build() {
        proto.Ast.SourceRange result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Ast.SourceRange buildPartial() {
        proto.Ast.SourceRange result = new proto.Ast.SourceRange(this);
        if (startBuilder_ == null) {
          result.start_ = start_;
        } else {
          result.start_ = startBuilder_.build();
        }
        if (endBuilder_ == null) {
          result.end_ = end_;
        } else {
          result.end_ = endBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof proto.Ast.SourceRange) {
          return mergeFrom((proto.Ast.SourceRange)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Ast.SourceRange other) {
        if (other == proto.Ast.SourceRange.getDefaultInstance()) return this;
        if (other.hasStart()) {
          mergeStart(other.getStart());
        }
        if (other.hasEnd()) {
          mergeEnd(other.getEnd());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        proto.Ast.SourceRange parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Ast.SourceRange) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private proto.Ast.SourceLocation start_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.SourceLocation, proto.Ast.SourceLocation.Builder, proto.Ast.SourceLocationOrBuilder> startBuilder_;
      /**
       * <code>.proto.SourceLocation start = 1;</code>
       */
      public boolean hasStart() {
        return startBuilder_ != null || start_ != null;
      }
      /**
       * <code>.proto.SourceLocation start = 1;</code>
       */
      public proto.Ast.SourceLocation getStart() {
        if (startBuilder_ == null) {
          return start_ == null ? proto.Ast.SourceLocation.getDefaultInstance() : start_;
        } else {
          return startBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.SourceLocation start = 1;</code>
       */
      public Builder setStart(proto.Ast.SourceLocation value) {
        if (startBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          start_ = value;
          onChanged();
        } else {
          startBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.SourceLocation start = 1;</code>
       */
      public Builder setStart(
          proto.Ast.SourceLocation.Builder builderForValue) {
        if (startBuilder_ == null) {
          start_ = builderForValue.build();
          onChanged();
        } else {
          startBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.SourceLocation start = 1;</code>
       */
      public Builder mergeStart(proto.Ast.SourceLocation value) {
        if (startBuilder_ == null) {
          if (start_ != null) {
            start_ =
              proto.Ast.SourceLocation.newBuilder(start_).mergeFrom(value).buildPartial();
          } else {
            start_ = value;
          }
          onChanged();
        } else {
          startBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.SourceLocation start = 1;</code>
       */
      public Builder clearStart() {
        if (startBuilder_ == null) {
          start_ = null;
          onChanged();
        } else {
          start_ = null;
          startBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.SourceLocation start = 1;</code>
       */
      public proto.Ast.SourceLocation.Builder getStartBuilder() {
        
        onChanged();
        return getStartFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.SourceLocation start = 1;</code>
       */
      public proto.Ast.SourceLocationOrBuilder getStartOrBuilder() {
        if (startBuilder_ != null) {
          return startBuilder_.getMessageOrBuilder();
        } else {
          return start_ == null ?
              proto.Ast.SourceLocation.getDefaultInstance() : start_;
        }
      }
      /**
       * <code>.proto.SourceLocation start = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.SourceLocation, proto.Ast.SourceLocation.Builder, proto.Ast.SourceLocationOrBuilder> 
          getStartFieldBuilder() {
        if (startBuilder_ == null) {
          startBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Ast.SourceLocation, proto.Ast.SourceLocation.Builder, proto.Ast.SourceLocationOrBuilder>(
                  getStart(),
                  getParentForChildren(),
                  isClean());
          start_ = null;
        }
        return startBuilder_;
      }

      private proto.Ast.SourceLocation end_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.SourceLocation, proto.Ast.SourceLocation.Builder, proto.Ast.SourceLocationOrBuilder> endBuilder_;
      /**
       * <code>.proto.SourceLocation end = 2;</code>
       */
      public boolean hasEnd() {
        return endBuilder_ != null || end_ != null;
      }
      /**
       * <code>.proto.SourceLocation end = 2;</code>
       */
      public proto.Ast.SourceLocation getEnd() {
        if (endBuilder_ == null) {
          return end_ == null ? proto.Ast.SourceLocation.getDefaultInstance() : end_;
        } else {
          return endBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.SourceLocation end = 2;</code>
       */
      public Builder setEnd(proto.Ast.SourceLocation value) {
        if (endBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          end_ = value;
          onChanged();
        } else {
          endBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.SourceLocation end = 2;</code>
       */
      public Builder setEnd(
          proto.Ast.SourceLocation.Builder builderForValue) {
        if (endBuilder_ == null) {
          end_ = builderForValue.build();
          onChanged();
        } else {
          endBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.SourceLocation end = 2;</code>
       */
      public Builder mergeEnd(proto.Ast.SourceLocation value) {
        if (endBuilder_ == null) {
          if (end_ != null) {
            end_ =
              proto.Ast.SourceLocation.newBuilder(end_).mergeFrom(value).buildPartial();
          } else {
            end_ = value;
          }
          onChanged();
        } else {
          endBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.SourceLocation end = 2;</code>
       */
      public Builder clearEnd() {
        if (endBuilder_ == null) {
          end_ = null;
          onChanged();
        } else {
          end_ = null;
          endBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.SourceLocation end = 2;</code>
       */
      public proto.Ast.SourceLocation.Builder getEndBuilder() {
        
        onChanged();
        return getEndFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.SourceLocation end = 2;</code>
       */
      public proto.Ast.SourceLocationOrBuilder getEndOrBuilder() {
        if (endBuilder_ != null) {
          return endBuilder_.getMessageOrBuilder();
        } else {
          return end_ == null ?
              proto.Ast.SourceLocation.getDefaultInstance() : end_;
        }
      }
      /**
       * <code>.proto.SourceLocation end = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.SourceLocation, proto.Ast.SourceLocation.Builder, proto.Ast.SourceLocationOrBuilder> 
          getEndFieldBuilder() {
        if (endBuilder_ == null) {
          endBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Ast.SourceLocation, proto.Ast.SourceLocation.Builder, proto.Ast.SourceLocationOrBuilder>(
                  getEnd(),
                  getParentForChildren(),
                  isClean());
          end_ = null;
        }
        return endBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:proto.SourceRange)
    }

    // @@protoc_insertion_point(class_scope:proto.SourceRange)
    private static final proto.Ast.SourceRange DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Ast.SourceRange();
    }

    public static proto.Ast.SourceRange getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<SourceRange>
        PARSER = new com.google.protobuf.AbstractParser<SourceRange>() {
      @java.lang.Override
      public SourceRange parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SourceRange(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SourceRange> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SourceRange> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public proto.Ast.SourceRange getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AstNodeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.AstNode)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.proto.AstNode.NodeType type = 1;</code>
     */
    int getTypeValue();
    /**
     * <code>.proto.AstNode.NodeType type = 1;</code>
     */
    proto.Ast.AstNode.NodeType getType();

    /**
     * <code>string name = 2;</code>
     */
    java.lang.String getName();
    /**
     * <code>string name = 2;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>string full_name = 3;</code>
     */
    java.lang.String getFullName();
    /**
     * <code>string full_name = 3;</code>
     */
    com.google.protobuf.ByteString
        getFullNameBytes();

    /**
     * <code>string base_type = 4;</code>
     */
    java.lang.String getBaseType();
    /**
     * <code>string base_type = 4;</code>
     */
    com.google.protobuf.ByteString
        getBaseTypeBytes();

    /**
     * <pre>
     * The module name used to include the base class/type
     * </pre>
     *
     * <code>string module = 5;</code>
     */
    java.lang.String getModule();
    /**
     * <pre>
     * The module name used to include the base class/type
     * </pre>
     *
     * <code>string module = 5;</code>
     */
    com.google.protobuf.ByteString
        getModuleBytes();

    /**
     * <pre>
     * The right value if current ast node is an assign expression
     * </pre>
     *
     * <code>string value = 6;</code>
     */
    java.lang.String getValue();
    /**
     * <pre>
     * The right value if current ast node is an assign expression
     * </pre>
     *
     * <code>string value = 6;</code>
     */
    com.google.protobuf.ByteString
        getValueBytes();

    /**
     * <pre>
     * The definition if current ast node is class/function definition
     * </pre>
     *
     * <code>string definition = 7;</code>
     */
    java.lang.String getDefinition();
    /**
     * <pre>
     * The definition if current ast node is class/function definition
     * </pre>
     *
     * <code>string definition = 7;</code>
     */
    com.google.protobuf.ByteString
        getDefinitionBytes();

    /**
     * <pre>
     **
     * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
     * (1) If value is specified, the parent node should be kept only if the value matches.
     * (2) If only value/index is specified, the specified args are sinks in taint analysis.
     * </pre>
     *
     * <code>repeated .proto.AstNode arg_nodes = 8;</code>
     */
    java.util.List<proto.Ast.AstNode> 
        getArgNodesList();
    /**
     * <pre>
     **
     * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
     * (1) If value is specified, the parent node should be kept only if the value matches.
     * (2) If only value/index is specified, the specified args are sinks in taint analysis.
     * </pre>
     *
     * <code>repeated .proto.AstNode arg_nodes = 8;</code>
     */
    proto.Ast.AstNode getArgNodes(int index);
    /**
     * <pre>
     **
     * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
     * (1) If value is specified, the parent node should be kept only if the value matches.
     * (2) If only value/index is specified, the specified args are sinks in taint analysis.
     * </pre>
     *
     * <code>repeated .proto.AstNode arg_nodes = 8;</code>
     */
    int getArgNodesCount();
    /**
     * <pre>
     **
     * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
     * (1) If value is specified, the parent node should be kept only if the value matches.
     * (2) If only value/index is specified, the specified args are sinks in taint analysis.
     * </pre>
     *
     * <code>repeated .proto.AstNode arg_nodes = 8;</code>
     */
    java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getArgNodesOrBuilderList();
    /**
     * <pre>
     **
     * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
     * (1) If value is specified, the parent node should be kept only if the value matches.
     * (2) If only value/index is specified, the specified args are sinks in taint analysis.
     * </pre>
     *
     * <code>repeated .proto.AstNode arg_nodes = 8;</code>
     */
    proto.Ast.AstNodeOrBuilder getArgNodesOrBuilder(
        int index);

    /**
     * <pre>
     * The value of arguments if current ast node is function calls
     * </pre>
     *
     * <code>repeated string arguments = 9;</code>
     */
    java.util.List<java.lang.String>
        getArgumentsList();
    /**
     * <pre>
     * The value of arguments if current ast node is function calls
     * </pre>
     *
     * <code>repeated string arguments = 9;</code>
     */
    int getArgumentsCount();
    /**
     * <pre>
     * The value of arguments if current ast node is function calls
     * </pre>
     *
     * <code>repeated string arguments = 9;</code>
     */
    java.lang.String getArguments(int index);
    /**
     * <pre>
     * The value of arguments if current ast node is function calls
     * </pre>
     *
     * <code>repeated string arguments = 9;</code>
     */
    com.google.protobuf.ByteString
        getArgumentsBytes(int index);

    /**
     * <pre>
     * All the statements related to current ast node
     * </pre>
     *
     * <code>string source = 10;</code>
     */
    java.lang.String getSource();
    /**
     * <pre>
     * All the statements related to current ast node
     * </pre>
     *
     * <code>string source = 10;</code>
     */
    com.google.protobuf.ByteString
        getSourceBytes();

    /**
     * <pre>
     * Collect the range/locations of the node
     * </pre>
     *
     * <code>.proto.SourceRange range = 11;</code>
     */
    boolean hasRange();
    /**
     * <pre>
     * Collect the range/locations of the node
     * </pre>
     *
     * <code>.proto.SourceRange range = 11;</code>
     */
    proto.Ast.SourceRange getRange();
    /**
     * <pre>
     * Collect the range/locations of the node
     * </pre>
     *
     * <code>.proto.SourceRange range = 11;</code>
     */
    proto.Ast.SourceRangeOrBuilder getRangeOrBuilder();

    /**
     * <pre>
     * Map each AstNode to a unique number, and allow flexible constraints expressed in SMT.
     * </pre>
     *
     * <code>int32 id = 12;</code>
     */
    int getId();

    /**
     * <pre>
     * Each API should either be source, sink or danger. Note: danger APIs are mostly sinks, e.g. rmdir.
     * </pre>
     *
     * <code>.proto.Functionality functionality = 13;</code>
     */
    int getFunctionalityValue();
    /**
     * <pre>
     * Each API should either be source, sink or danger. Note: danger APIs are mostly sinks, e.g. rmdir.
     * </pre>
     *
     * <code>.proto.Functionality functionality = 13;</code>
     */
    proto.Ast.Functionality getFunctionality();

    /**
     * <code>.proto.SourceType source_type = 14;</code>
     */
    int getSourceTypeValue();
    /**
     * <code>.proto.SourceType source_type = 14;</code>
     */
    proto.Ast.SourceType getSourceType();

    /**
     * <code>.proto.SinkType sink_type = 15;</code>
     */
    int getSinkTypeValue();
    /**
     * <code>.proto.SinkType sink_type = 15;</code>
     */
    proto.Ast.SinkType getSinkType();

    /**
     * <code>.proto.DangerType danger_type = 16;</code>
     */
    int getDangerTypeValue();
    /**
     * <code>.proto.DangerType danger_type = 16;</code>
     */
    proto.Ast.DangerType getDangerType();

    /**
     * <code>.proto.PropagateType propagate_type = 17;</code>
     */
    int getPropagateTypeValue();
    /**
     * <code>.proto.PropagateType propagate_type = 17;</code>
     */
    proto.Ast.PropagateType getPropagateType();

    /**
     * <pre>
     * Record children of the current node
     * </pre>
     *
     * <code>repeated .proto.AstNode child_nodes = 18;</code>
     */
    java.util.List<proto.Ast.AstNode> 
        getChildNodesList();
    /**
     * <pre>
     * Record children of the current node
     * </pre>
     *
     * <code>repeated .proto.AstNode child_nodes = 18;</code>
     */
    proto.Ast.AstNode getChildNodes(int index);
    /**
     * <pre>
     * Record children of the current node
     * </pre>
     *
     * <code>repeated .proto.AstNode child_nodes = 18;</code>
     */
    int getChildNodesCount();
    /**
     * <pre>
     * Record children of the current node
     * </pre>
     *
     * <code>repeated .proto.AstNode child_nodes = 18;</code>
     */
    java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getChildNodesOrBuilderList();
    /**
     * <pre>
     * Record children of the current node
     * </pre>
     *
     * <code>repeated .proto.AstNode child_nodes = 18;</code>
     */
    proto.Ast.AstNodeOrBuilder getChildNodesOrBuilder(
        int index);

    /**
     * <pre>
     * Whether the base_type can be instantiated or not. This can be used in func_only mode to improve API matching.
     * </pre>
     *
     * <code>bool instantiatable = 19;</code>
     */
    boolean getInstantiatable();

    public proto.Ast.AstNode.AccurateFunctionalityCase getAccurateFunctionalityCase();
  }
  /**
   * Protobuf type {@code proto.AstNode}
   */
  public  static final class AstNode extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.AstNode)
      AstNodeOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AstNode.newBuilder() to construct.
    private AstNode(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AstNode() {
      type_ = 0;
      name_ = "";
      fullName_ = "";
      baseType_ = "";
      module_ = "";
      value_ = "";
      definition_ = "";
      argNodes_ = java.util.Collections.emptyList();
      arguments_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      source_ = "";
      id_ = 0;
      functionality_ = 0;
      childNodes_ = java.util.Collections.emptyList();
      instantiatable_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AstNode(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {
              int rawValue = input.readEnum();

              type_ = rawValue;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              name_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              fullName_ = s;
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              baseType_ = s;
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();

              module_ = s;
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();

              value_ = s;
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();

              definition_ = s;
              break;
            }
            case 66: {
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                argNodes_ = new java.util.ArrayList<proto.Ast.AstNode>();
                mutable_bitField0_ |= 0x00000080;
              }
              argNodes_.add(
                  input.readMessage(proto.Ast.AstNode.parser(), extensionRegistry));
              break;
            }
            case 74: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                arguments_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000100;
              }
              arguments_.add(s);
              break;
            }
            case 82: {
              java.lang.String s = input.readStringRequireUtf8();

              source_ = s;
              break;
            }
            case 90: {
              proto.Ast.SourceRange.Builder subBuilder = null;
              if (range_ != null) {
                subBuilder = range_.toBuilder();
              }
              range_ = input.readMessage(proto.Ast.SourceRange.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(range_);
                range_ = subBuilder.buildPartial();
              }

              break;
            }
            case 96: {

              id_ = input.readInt32();
              break;
            }
            case 104: {
              int rawValue = input.readEnum();

              functionality_ = rawValue;
              break;
            }
            case 112: {
              int rawValue = input.readEnum();
              accurateFunctionalityCase_ = 14;
              accurateFunctionality_ = rawValue;
              break;
            }
            case 120: {
              int rawValue = input.readEnum();
              accurateFunctionalityCase_ = 15;
              accurateFunctionality_ = rawValue;
              break;
            }
            case 128: {
              int rawValue = input.readEnum();
              accurateFunctionalityCase_ = 16;
              accurateFunctionality_ = rawValue;
              break;
            }
            case 136: {
              int rawValue = input.readEnum();
              accurateFunctionalityCase_ = 17;
              accurateFunctionality_ = rawValue;
              break;
            }
            case 146: {
              if (!((mutable_bitField0_ & 0x00020000) == 0x00020000)) {
                childNodes_ = new java.util.ArrayList<proto.Ast.AstNode>();
                mutable_bitField0_ |= 0x00020000;
              }
              childNodes_.add(
                  input.readMessage(proto.Ast.AstNode.parser(), extensionRegistry));
              break;
            }
            case 152: {

              instantiatable_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
          argNodes_ = java.util.Collections.unmodifiableList(argNodes_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          arguments_ = arguments_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00020000) == 0x00020000)) {
          childNodes_ = java.util.Collections.unmodifiableList(childNodes_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Ast.internal_static_proto_AstNode_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Ast.internal_static_proto_AstNode_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Ast.AstNode.class, proto.Ast.AstNode.Builder.class);
    }

    /**
     * Protobuf enum {@code proto.AstNode.NodeType}
     */
    public enum NodeType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <pre>
       * common types
       * </pre>
       *
       * <code>UNKNOWN = 0;</code>
       */
      UNKNOWN(0),
      /**
       * <pre>
       * declarations
       * </pre>
       *
       * <code>FUNCTION_DECL = 1;</code>
       */
      FUNCTION_DECL(1),
      /**
       * <code>VARIABLE_DECL = 2;</code>
       */
      VARIABLE_DECL(2),
      /**
       * <code>CLASS_DECL = 3;</code>
       */
      CLASS_DECL(3),
      /**
       * <pre>
       * references
       * </pre>
       *
       * <code>FUNCTION_DECL_REF_EXPR = 11;</code>
       */
      FUNCTION_DECL_REF_EXPR(11),
      /**
       * <code>VARIABLE_DECL_REF_EXPR = 12;</code>
       */
      VARIABLE_DECL_REF_EXPR(12),
      /**
       * <code>CLASS_DECL_REF_EXPR = 13;</code>
       */
      CLASS_DECL_REF_EXPR(13),
      /**
       * <pre>
       **
       * Python node types
       * https://docs.python.org/2/library/ast.html
       * https://docs.python.org/3/library/ast.html
       * https://github.com/python-security/pyt/blob/master/pyt/core/node_types.py
       * </pre>
       *
       * <code>PY_FUNCTION_DEF = 101;</code>
       */
      PY_FUNCTION_DEF(101),
      /**
       * <pre>
       **
       * JavaScript node types
       * https://github.com/Kronuz/esprima-python/blob/master/esprima/syntax.py
       * </pre>
       *
       * <code>JS_ASSIGNMENT_EXPRESSION = 201;</code>
       */
      JS_ASSIGNMENT_EXPRESSION(201),
      /**
       * <pre>
       **
       * Ruby node types
       * https://github.com/whitequark/parser/blob/master/lib/parser/ruby26.y
       * https://github.com/whitequark/parser/blob/master/lib/parser/ast/processor.rb
       * </pre>
       *
       * <code>RB_REGULAR_NODE = 301;</code>
       */
      RB_REGULAR_NODE(301),
      /**
       * <code>RB_VARIABLE_NODE = 302;</code>
       */
      RB_VARIABLE_NODE(302),
      /**
       * <pre>
       **
       * Java node types
       * https://github.com/Sable/soot/blob/develop/src/main/generated/jastadd/soot/JastAddJ/ASTNode.java
       * </pre>
       *
       * <code>JAVA_IDENTITY_STMT = 401;</code>
       */
      JAVA_IDENTITY_STMT(401),
      /**
       * <pre>
       **
       * Php node types
       * https://github.com/nikic/PHP-Parser/blob/master/grammar/php5.y
       * https://github.com/nikic/PHP-Parser/blob/master/grammar/php7.y
       * </pre>
       *
       * <code>PHP_EXPR_VARIABLE = 501;</code>
       */
      PHP_EXPR_VARIABLE(501),
      UNRECOGNIZED(-1),
      ;

      /**
       * <pre>
       * common types
       * </pre>
       *
       * <code>UNKNOWN = 0;</code>
       */
      public static final int UNKNOWN_VALUE = 0;
      /**
       * <pre>
       * declarations
       * </pre>
       *
       * <code>FUNCTION_DECL = 1;</code>
       */
      public static final int FUNCTION_DECL_VALUE = 1;
      /**
       * <code>VARIABLE_DECL = 2;</code>
       */
      public static final int VARIABLE_DECL_VALUE = 2;
      /**
       * <code>CLASS_DECL = 3;</code>
       */
      public static final int CLASS_DECL_VALUE = 3;
      /**
       * <pre>
       * references
       * </pre>
       *
       * <code>FUNCTION_DECL_REF_EXPR = 11;</code>
       */
      public static final int FUNCTION_DECL_REF_EXPR_VALUE = 11;
      /**
       * <code>VARIABLE_DECL_REF_EXPR = 12;</code>
       */
      public static final int VARIABLE_DECL_REF_EXPR_VALUE = 12;
      /**
       * <code>CLASS_DECL_REF_EXPR = 13;</code>
       */
      public static final int CLASS_DECL_REF_EXPR_VALUE = 13;
      /**
       * <pre>
       **
       * Python node types
       * https://docs.python.org/2/library/ast.html
       * https://docs.python.org/3/library/ast.html
       * https://github.com/python-security/pyt/blob/master/pyt/core/node_types.py
       * </pre>
       *
       * <code>PY_FUNCTION_DEF = 101;</code>
       */
      public static final int PY_FUNCTION_DEF_VALUE = 101;
      /**
       * <pre>
       **
       * JavaScript node types
       * https://github.com/Kronuz/esprima-python/blob/master/esprima/syntax.py
       * </pre>
       *
       * <code>JS_ASSIGNMENT_EXPRESSION = 201;</code>
       */
      public static final int JS_ASSIGNMENT_EXPRESSION_VALUE = 201;
      /**
       * <pre>
       **
       * Ruby node types
       * https://github.com/whitequark/parser/blob/master/lib/parser/ruby26.y
       * https://github.com/whitequark/parser/blob/master/lib/parser/ast/processor.rb
       * </pre>
       *
       * <code>RB_REGULAR_NODE = 301;</code>
       */
      public static final int RB_REGULAR_NODE_VALUE = 301;
      /**
       * <code>RB_VARIABLE_NODE = 302;</code>
       */
      public static final int RB_VARIABLE_NODE_VALUE = 302;
      /**
       * <pre>
       **
       * Java node types
       * https://github.com/Sable/soot/blob/develop/src/main/generated/jastadd/soot/JastAddJ/ASTNode.java
       * </pre>
       *
       * <code>JAVA_IDENTITY_STMT = 401;</code>
       */
      public static final int JAVA_IDENTITY_STMT_VALUE = 401;
      /**
       * <pre>
       **
       * Php node types
       * https://github.com/nikic/PHP-Parser/blob/master/grammar/php5.y
       * https://github.com/nikic/PHP-Parser/blob/master/grammar/php7.y
       * </pre>
       *
       * <code>PHP_EXPR_VARIABLE = 501;</code>
       */
      public static final int PHP_EXPR_VARIABLE_VALUE = 501;


      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static NodeType valueOf(int value) {
        return forNumber(value);
      }

      public static NodeType forNumber(int value) {
        switch (value) {
          case 0: return UNKNOWN;
          case 1: return FUNCTION_DECL;
          case 2: return VARIABLE_DECL;
          case 3: return CLASS_DECL;
          case 11: return FUNCTION_DECL_REF_EXPR;
          case 12: return VARIABLE_DECL_REF_EXPR;
          case 13: return CLASS_DECL_REF_EXPR;
          case 101: return PY_FUNCTION_DEF;
          case 201: return JS_ASSIGNMENT_EXPRESSION;
          case 301: return RB_REGULAR_NODE;
          case 302: return RB_VARIABLE_NODE;
          case 401: return JAVA_IDENTITY_STMT;
          case 501: return PHP_EXPR_VARIABLE;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<NodeType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          NodeType> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<NodeType>() {
              public NodeType findValueByNumber(int number) {
                return NodeType.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return proto.Ast.AstNode.getDescriptor().getEnumTypes().get(0);
      }

      private static final NodeType[] VALUES = values();

      public static NodeType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        if (desc.getIndex() == -1) {
          return UNRECOGNIZED;
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private NodeType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:proto.AstNode.NodeType)
    }

    private int bitField0_;
    private int accurateFunctionalityCase_ = 0;
    private java.lang.Object accurateFunctionality_;
    public enum AccurateFunctionalityCase
        implements com.google.protobuf.Internal.EnumLite {
      SOURCE_TYPE(14),
      SINK_TYPE(15),
      DANGER_TYPE(16),
      PROPAGATE_TYPE(17),
      ACCURATEFUNCTIONALITY_NOT_SET(0);
      private final int value;
      private AccurateFunctionalityCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static AccurateFunctionalityCase valueOf(int value) {
        return forNumber(value);
      }

      public static AccurateFunctionalityCase forNumber(int value) {
        switch (value) {
          case 14: return SOURCE_TYPE;
          case 15: return SINK_TYPE;
          case 16: return DANGER_TYPE;
          case 17: return PROPAGATE_TYPE;
          case 0: return ACCURATEFUNCTIONALITY_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public AccurateFunctionalityCase
    getAccurateFunctionalityCase() {
      return AccurateFunctionalityCase.forNumber(
          accurateFunctionalityCase_);
    }

    public static final int TYPE_FIELD_NUMBER = 1;
    private int type_;
    /**
     * <code>.proto.AstNode.NodeType type = 1;</code>
     */
    public int getTypeValue() {
      return type_;
    }
    /**
     * <code>.proto.AstNode.NodeType type = 1;</code>
     */
    public proto.Ast.AstNode.NodeType getType() {
      @SuppressWarnings("deprecation")
      proto.Ast.AstNode.NodeType result = proto.Ast.AstNode.NodeType.valueOf(type_);
      return result == null ? proto.Ast.AstNode.NodeType.UNRECOGNIZED : result;
    }

    public static final int NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object name_;
    /**
     * <code>string name = 2;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * <code>string name = 2;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FULL_NAME_FIELD_NUMBER = 3;
    private volatile java.lang.Object fullName_;
    /**
     * <code>string full_name = 3;</code>
     */
    public java.lang.String getFullName() {
      java.lang.Object ref = fullName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        fullName_ = s;
        return s;
      }
    }
    /**
     * <code>string full_name = 3;</code>
     */
    public com.google.protobuf.ByteString
        getFullNameBytes() {
      java.lang.Object ref = fullName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        fullName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int BASE_TYPE_FIELD_NUMBER = 4;
    private volatile java.lang.Object baseType_;
    /**
     * <code>string base_type = 4;</code>
     */
    public java.lang.String getBaseType() {
      java.lang.Object ref = baseType_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        baseType_ = s;
        return s;
      }
    }
    /**
     * <code>string base_type = 4;</code>
     */
    public com.google.protobuf.ByteString
        getBaseTypeBytes() {
      java.lang.Object ref = baseType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        baseType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MODULE_FIELD_NUMBER = 5;
    private volatile java.lang.Object module_;
    /**
     * <pre>
     * The module name used to include the base class/type
     * </pre>
     *
     * <code>string module = 5;</code>
     */
    public java.lang.String getModule() {
      java.lang.Object ref = module_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        module_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * The module name used to include the base class/type
     * </pre>
     *
     * <code>string module = 5;</code>
     */
    public com.google.protobuf.ByteString
        getModuleBytes() {
      java.lang.Object ref = module_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        module_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 6;
    private volatile java.lang.Object value_;
    /**
     * <pre>
     * The right value if current ast node is an assign expression
     * </pre>
     *
     * <code>string value = 6;</code>
     */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        value_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * The right value if current ast node is an assign expression
     * </pre>
     *
     * <code>string value = 6;</code>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEFINITION_FIELD_NUMBER = 7;
    private volatile java.lang.Object definition_;
    /**
     * <pre>
     * The definition if current ast node is class/function definition
     * </pre>
     *
     * <code>string definition = 7;</code>
     */
    public java.lang.String getDefinition() {
      java.lang.Object ref = definition_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        definition_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * The definition if current ast node is class/function definition
     * </pre>
     *
     * <code>string definition = 7;</code>
     */
    public com.google.protobuf.ByteString
        getDefinitionBytes() {
      java.lang.Object ref = definition_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        definition_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ARG_NODES_FIELD_NUMBER = 8;
    private java.util.List<proto.Ast.AstNode> argNodes_;
    /**
     * <pre>
     **
     * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
     * (1) If value is specified, the parent node should be kept only if the value matches.
     * (2) If only value/index is specified, the specified args are sinks in taint analysis.
     * </pre>
     *
     * <code>repeated .proto.AstNode arg_nodes = 8;</code>
     */
    public java.util.List<proto.Ast.AstNode> getArgNodesList() {
      return argNodes_;
    }
    /**
     * <pre>
     **
     * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
     * (1) If value is specified, the parent node should be kept only if the value matches.
     * (2) If only value/index is specified, the specified args are sinks in taint analysis.
     * </pre>
     *
     * <code>repeated .proto.AstNode arg_nodes = 8;</code>
     */
    public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getArgNodesOrBuilderList() {
      return argNodes_;
    }
    /**
     * <pre>
     **
     * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
     * (1) If value is specified, the parent node should be kept only if the value matches.
     * (2) If only value/index is specified, the specified args are sinks in taint analysis.
     * </pre>
     *
     * <code>repeated .proto.AstNode arg_nodes = 8;</code>
     */
    public int getArgNodesCount() {
      return argNodes_.size();
    }
    /**
     * <pre>
     **
     * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
     * (1) If value is specified, the parent node should be kept only if the value matches.
     * (2) If only value/index is specified, the specified args are sinks in taint analysis.
     * </pre>
     *
     * <code>repeated .proto.AstNode arg_nodes = 8;</code>
     */
    public proto.Ast.AstNode getArgNodes(int index) {
      return argNodes_.get(index);
    }
    /**
     * <pre>
     **
     * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
     * (1) If value is specified, the parent node should be kept only if the value matches.
     * (2) If only value/index is specified, the specified args are sinks in taint analysis.
     * </pre>
     *
     * <code>repeated .proto.AstNode arg_nodes = 8;</code>
     */
    public proto.Ast.AstNodeOrBuilder getArgNodesOrBuilder(
        int index) {
      return argNodes_.get(index);
    }

    public static final int ARGUMENTS_FIELD_NUMBER = 9;
    private com.google.protobuf.LazyStringList arguments_;
    /**
     * <pre>
     * The value of arguments if current ast node is function calls
     * </pre>
     *
     * <code>repeated string arguments = 9;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getArgumentsList() {
      return arguments_;
    }
    /**
     * <pre>
     * The value of arguments if current ast node is function calls
     * </pre>
     *
     * <code>repeated string arguments = 9;</code>
     */
    public int getArgumentsCount() {
      return arguments_.size();
    }
    /**
     * <pre>
     * The value of arguments if current ast node is function calls
     * </pre>
     *
     * <code>repeated string arguments = 9;</code>
     */
    public java.lang.String getArguments(int index) {
      return arguments_.get(index);
    }
    /**
     * <pre>
     * The value of arguments if current ast node is function calls
     * </pre>
     *
     * <code>repeated string arguments = 9;</code>
     */
    public com.google.protobuf.ByteString
        getArgumentsBytes(int index) {
      return arguments_.getByteString(index);
    }

    public static final int SOURCE_FIELD_NUMBER = 10;
    private volatile java.lang.Object source_;
    /**
     * <pre>
     * All the statements related to current ast node
     * </pre>
     *
     * <code>string source = 10;</code>
     */
    public java.lang.String getSource() {
      java.lang.Object ref = source_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        source_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * All the statements related to current ast node
     * </pre>
     *
     * <code>string source = 10;</code>
     */
    public com.google.protobuf.ByteString
        getSourceBytes() {
      java.lang.Object ref = source_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        source_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RANGE_FIELD_NUMBER = 11;
    private proto.Ast.SourceRange range_;
    /**
     * <pre>
     * Collect the range/locations of the node
     * </pre>
     *
     * <code>.proto.SourceRange range = 11;</code>
     */
    public boolean hasRange() {
      return range_ != null;
    }
    /**
     * <pre>
     * Collect the range/locations of the node
     * </pre>
     *
     * <code>.proto.SourceRange range = 11;</code>
     */
    public proto.Ast.SourceRange getRange() {
      return range_ == null ? proto.Ast.SourceRange.getDefaultInstance() : range_;
    }
    /**
     * <pre>
     * Collect the range/locations of the node
     * </pre>
     *
     * <code>.proto.SourceRange range = 11;</code>
     */
    public proto.Ast.SourceRangeOrBuilder getRangeOrBuilder() {
      return getRange();
    }

    public static final int ID_FIELD_NUMBER = 12;
    private int id_;
    /**
     * <pre>
     * Map each AstNode to a unique number, and allow flexible constraints expressed in SMT.
     * </pre>
     *
     * <code>int32 id = 12;</code>
     */
    public int getId() {
      return id_;
    }

    public static final int FUNCTIONALITY_FIELD_NUMBER = 13;
    private int functionality_;
    /**
     * <pre>
     * Each API should either be source, sink or danger. Note: danger APIs are mostly sinks, e.g. rmdir.
     * </pre>
     *
     * <code>.proto.Functionality functionality = 13;</code>
     */
    public int getFunctionalityValue() {
      return functionality_;
    }
    /**
     * <pre>
     * Each API should either be source, sink or danger. Note: danger APIs are mostly sinks, e.g. rmdir.
     * </pre>
     *
     * <code>.proto.Functionality functionality = 13;</code>
     */
    public proto.Ast.Functionality getFunctionality() {
      @SuppressWarnings("deprecation")
      proto.Ast.Functionality result = proto.Ast.Functionality.valueOf(functionality_);
      return result == null ? proto.Ast.Functionality.UNRECOGNIZED : result;
    }

    public static final int SOURCE_TYPE_FIELD_NUMBER = 14;
    /**
     * <code>.proto.SourceType source_type = 14;</code>
     */
    public int getSourceTypeValue() {
      if (accurateFunctionalityCase_ == 14) {
        return (java.lang.Integer) accurateFunctionality_;
      }
      return 0;
    }
    /**
     * <code>.proto.SourceType source_type = 14;</code>
     */
    public proto.Ast.SourceType getSourceType() {
      if (accurateFunctionalityCase_ == 14) {
        @SuppressWarnings("deprecation")
        proto.Ast.SourceType result = proto.Ast.SourceType.valueOf(
            (java.lang.Integer) accurateFunctionality_);
        return result == null ? proto.Ast.SourceType.UNRECOGNIZED : result;
      }
      return proto.Ast.SourceType.SOURCE_UNCLASSIFIED;
    }

    public static final int SINK_TYPE_FIELD_NUMBER = 15;
    /**
     * <code>.proto.SinkType sink_type = 15;</code>
     */
    public int getSinkTypeValue() {
      if (accurateFunctionalityCase_ == 15) {
        return (java.lang.Integer) accurateFunctionality_;
      }
      return 0;
    }
    /**
     * <code>.proto.SinkType sink_type = 15;</code>
     */
    public proto.Ast.SinkType getSinkType() {
      if (accurateFunctionalityCase_ == 15) {
        @SuppressWarnings("deprecation")
        proto.Ast.SinkType result = proto.Ast.SinkType.valueOf(
            (java.lang.Integer) accurateFunctionality_);
        return result == null ? proto.Ast.SinkType.UNRECOGNIZED : result;
      }
      return proto.Ast.SinkType.SINK_UNCLASSIFIED;
    }

    public static final int DANGER_TYPE_FIELD_NUMBER = 16;
    /**
     * <code>.proto.DangerType danger_type = 16;</code>
     */
    public int getDangerTypeValue() {
      if (accurateFunctionalityCase_ == 16) {
        return (java.lang.Integer) accurateFunctionality_;
      }
      return 0;
    }
    /**
     * <code>.proto.DangerType danger_type = 16;</code>
     */
    public proto.Ast.DangerType getDangerType() {
      if (accurateFunctionalityCase_ == 16) {
        @SuppressWarnings("deprecation")
        proto.Ast.DangerType result = proto.Ast.DangerType.valueOf(
            (java.lang.Integer) accurateFunctionality_);
        return result == null ? proto.Ast.DangerType.UNRECOGNIZED : result;
      }
      return proto.Ast.DangerType.DANGER_UNCLASSIFIED_DANGER;
    }

    public static final int PROPAGATE_TYPE_FIELD_NUMBER = 17;
    /**
     * <code>.proto.PropagateType propagate_type = 17;</code>
     */
    public int getPropagateTypeValue() {
      if (accurateFunctionalityCase_ == 17) {
        return (java.lang.Integer) accurateFunctionality_;
      }
      return 0;
    }
    /**
     * <code>.proto.PropagateType propagate_type = 17;</code>
     */
    public proto.Ast.PropagateType getPropagateType() {
      if (accurateFunctionalityCase_ == 17) {
        @SuppressWarnings("deprecation")
        proto.Ast.PropagateType result = proto.Ast.PropagateType.valueOf(
            (java.lang.Integer) accurateFunctionality_);
        return result == null ? proto.Ast.PropagateType.UNRECOGNIZED : result;
      }
      return proto.Ast.PropagateType.PROPAGATE_UNCLASSIFIED;
    }

    public static final int CHILD_NODES_FIELD_NUMBER = 18;
    private java.util.List<proto.Ast.AstNode> childNodes_;
    /**
     * <pre>
     * Record children of the current node
     * </pre>
     *
     * <code>repeated .proto.AstNode child_nodes = 18;</code>
     */
    public java.util.List<proto.Ast.AstNode> getChildNodesList() {
      return childNodes_;
    }
    /**
     * <pre>
     * Record children of the current node
     * </pre>
     *
     * <code>repeated .proto.AstNode child_nodes = 18;</code>
     */
    public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getChildNodesOrBuilderList() {
      return childNodes_;
    }
    /**
     * <pre>
     * Record children of the current node
     * </pre>
     *
     * <code>repeated .proto.AstNode child_nodes = 18;</code>
     */
    public int getChildNodesCount() {
      return childNodes_.size();
    }
    /**
     * <pre>
     * Record children of the current node
     * </pre>
     *
     * <code>repeated .proto.AstNode child_nodes = 18;</code>
     */
    public proto.Ast.AstNode getChildNodes(int index) {
      return childNodes_.get(index);
    }
    /**
     * <pre>
     * Record children of the current node
     * </pre>
     *
     * <code>repeated .proto.AstNode child_nodes = 18;</code>
     */
    public proto.Ast.AstNodeOrBuilder getChildNodesOrBuilder(
        int index) {
      return childNodes_.get(index);
    }

    public static final int INSTANTIATABLE_FIELD_NUMBER = 19;
    private boolean instantiatable_;
    /**
     * <pre>
     * Whether the base_type can be instantiated or not. This can be used in func_only mode to improve API matching.
     * </pre>
     *
     * <code>bool instantiatable = 19;</code>
     */
    public boolean getInstantiatable() {
      return instantiatable_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (type_ != proto.Ast.AstNode.NodeType.UNKNOWN.getNumber()) {
        output.writeEnum(1, type_);
      }
      if (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
      }
      if (!getFullNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, fullName_);
      }
      if (!getBaseTypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, baseType_);
      }
      if (!getModuleBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, module_);
      }
      if (!getValueBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, value_);
      }
      if (!getDefinitionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, definition_);
      }
      for (int i = 0; i < argNodes_.size(); i++) {
        output.writeMessage(8, argNodes_.get(i));
      }
      for (int i = 0; i < arguments_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 9, arguments_.getRaw(i));
      }
      if (!getSourceBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 10, source_);
      }
      if (range_ != null) {
        output.writeMessage(11, getRange());
      }
      if (id_ != 0) {
        output.writeInt32(12, id_);
      }
      if (functionality_ != proto.Ast.Functionality.UNCLASSIFIED.getNumber()) {
        output.writeEnum(13, functionality_);
      }
      if (accurateFunctionalityCase_ == 14) {
        output.writeEnum(14, ((java.lang.Integer) accurateFunctionality_));
      }
      if (accurateFunctionalityCase_ == 15) {
        output.writeEnum(15, ((java.lang.Integer) accurateFunctionality_));
      }
      if (accurateFunctionalityCase_ == 16) {
        output.writeEnum(16, ((java.lang.Integer) accurateFunctionality_));
      }
      if (accurateFunctionalityCase_ == 17) {
        output.writeEnum(17, ((java.lang.Integer) accurateFunctionality_));
      }
      for (int i = 0; i < childNodes_.size(); i++) {
        output.writeMessage(18, childNodes_.get(i));
      }
      if (instantiatable_ != false) {
        output.writeBool(19, instantiatable_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (type_ != proto.Ast.AstNode.NodeType.UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, type_);
      }
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
      }
      if (!getFullNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, fullName_);
      }
      if (!getBaseTypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, baseType_);
      }
      if (!getModuleBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, module_);
      }
      if (!getValueBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, value_);
      }
      if (!getDefinitionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, definition_);
      }
      for (int i = 0; i < argNodes_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, argNodes_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < arguments_.size(); i++) {
          dataSize += computeStringSizeNoTag(arguments_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getArgumentsList().size();
      }
      if (!getSourceBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, source_);
      }
      if (range_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, getRange());
      }
      if (id_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(12, id_);
      }
      if (functionality_ != proto.Ast.Functionality.UNCLASSIFIED.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(13, functionality_);
      }
      if (accurateFunctionalityCase_ == 14) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(14, ((java.lang.Integer) accurateFunctionality_));
      }
      if (accurateFunctionalityCase_ == 15) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(15, ((java.lang.Integer) accurateFunctionality_));
      }
      if (accurateFunctionalityCase_ == 16) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(16, ((java.lang.Integer) accurateFunctionality_));
      }
      if (accurateFunctionalityCase_ == 17) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(17, ((java.lang.Integer) accurateFunctionality_));
      }
      for (int i = 0; i < childNodes_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(18, childNodes_.get(i));
      }
      if (instantiatable_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(19, instantiatable_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof proto.Ast.AstNode)) {
        return super.equals(obj);
      }
      proto.Ast.AstNode other = (proto.Ast.AstNode) obj;

      boolean result = true;
      result = result && type_ == other.type_;
      result = result && getName()
          .equals(other.getName());
      result = result && getFullName()
          .equals(other.getFullName());
      result = result && getBaseType()
          .equals(other.getBaseType());
      result = result && getModule()
          .equals(other.getModule());
      result = result && getValue()
          .equals(other.getValue());
      result = result && getDefinition()
          .equals(other.getDefinition());
      result = result && getArgNodesList()
          .equals(other.getArgNodesList());
      result = result && getArgumentsList()
          .equals(other.getArgumentsList());
      result = result && getSource()
          .equals(other.getSource());
      result = result && (hasRange() == other.hasRange());
      if (hasRange()) {
        result = result && getRange()
            .equals(other.getRange());
      }
      result = result && (getId()
          == other.getId());
      result = result && functionality_ == other.functionality_;
      result = result && getChildNodesList()
          .equals(other.getChildNodesList());
      result = result && (getInstantiatable()
          == other.getInstantiatable());
      result = result && getAccurateFunctionalityCase().equals(
          other.getAccurateFunctionalityCase());
      if (!result) return false;
      switch (accurateFunctionalityCase_) {
        case 14:
          result = result && getSourceTypeValue()
              == other.getSourceTypeValue();
          break;
        case 15:
          result = result && getSinkTypeValue()
              == other.getSinkTypeValue();
          break;
        case 16:
          result = result && getDangerTypeValue()
              == other.getDangerTypeValue();
          break;
        case 17:
          result = result && getPropagateTypeValue()
              == other.getPropagateTypeValue();
          break;
        case 0:
        default:
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + TYPE_FIELD_NUMBER;
      hash = (53 * hash) + type_;
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + FULL_NAME_FIELD_NUMBER;
      hash = (53 * hash) + getFullName().hashCode();
      hash = (37 * hash) + BASE_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + getBaseType().hashCode();
      hash = (37 * hash) + MODULE_FIELD_NUMBER;
      hash = (53 * hash) + getModule().hashCode();
      hash = (37 * hash) + VALUE_FIELD_NUMBER;
      hash = (53 * hash) + getValue().hashCode();
      hash = (37 * hash) + DEFINITION_FIELD_NUMBER;
      hash = (53 * hash) + getDefinition().hashCode();
      if (getArgNodesCount() > 0) {
        hash = (37 * hash) + ARG_NODES_FIELD_NUMBER;
        hash = (53 * hash) + getArgNodesList().hashCode();
      }
      if (getArgumentsCount() > 0) {
        hash = (37 * hash) + ARGUMENTS_FIELD_NUMBER;
        hash = (53 * hash) + getArgumentsList().hashCode();
      }
      hash = (37 * hash) + SOURCE_FIELD_NUMBER;
      hash = (53 * hash) + getSource().hashCode();
      if (hasRange()) {
        hash = (37 * hash) + RANGE_FIELD_NUMBER;
        hash = (53 * hash) + getRange().hashCode();
      }
      hash = (37 * hash) + ID_FIELD_NUMBER;
      hash = (53 * hash) + getId();
      hash = (37 * hash) + FUNCTIONALITY_FIELD_NUMBER;
      hash = (53 * hash) + functionality_;
      if (getChildNodesCount() > 0) {
        hash = (37 * hash) + CHILD_NODES_FIELD_NUMBER;
        hash = (53 * hash) + getChildNodesList().hashCode();
      }
      hash = (37 * hash) + INSTANTIATABLE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getInstantiatable());
      switch (accurateFunctionalityCase_) {
        case 14:
          hash = (37 * hash) + SOURCE_TYPE_FIELD_NUMBER;
          hash = (53 * hash) + getSourceTypeValue();
          break;
        case 15:
          hash = (37 * hash) + SINK_TYPE_FIELD_NUMBER;
          hash = (53 * hash) + getSinkTypeValue();
          break;
        case 16:
          hash = (37 * hash) + DANGER_TYPE_FIELD_NUMBER;
          hash = (53 * hash) + getDangerTypeValue();
          break;
        case 17:
          hash = (37 * hash) + PROPAGATE_TYPE_FIELD_NUMBER;
          hash = (53 * hash) + getPropagateTypeValue();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.Ast.AstNode parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.AstNode parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.AstNode parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.AstNode parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.AstNode parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.AstNode parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.AstNode parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.AstNode parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.AstNode parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.Ast.AstNode parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.AstNode parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.AstNode parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(proto.Ast.AstNode prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code proto.AstNode}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.AstNode)
        proto.Ast.AstNodeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Ast.internal_static_proto_AstNode_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Ast.internal_static_proto_AstNode_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Ast.AstNode.class, proto.Ast.AstNode.Builder.class);
      }

      // Construct using proto.Ast.AstNode.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getArgNodesFieldBuilder();
          getChildNodesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        type_ = 0;

        name_ = "";

        fullName_ = "";

        baseType_ = "";

        module_ = "";

        value_ = "";

        definition_ = "";

        if (argNodesBuilder_ == null) {
          argNodes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
        } else {
          argNodesBuilder_.clear();
        }
        arguments_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        source_ = "";

        if (rangeBuilder_ == null) {
          range_ = null;
        } else {
          range_ = null;
          rangeBuilder_ = null;
        }
        id_ = 0;

        functionality_ = 0;

        if (childNodesBuilder_ == null) {
          childNodes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00020000);
        } else {
          childNodesBuilder_.clear();
        }
        instantiatable_ = false;

        accurateFunctionalityCase_ = 0;
        accurateFunctionality_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Ast.internal_static_proto_AstNode_descriptor;
      }

      @java.lang.Override
      public proto.Ast.AstNode getDefaultInstanceForType() {
        return proto.Ast.AstNode.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Ast.AstNode build() {
        proto.Ast.AstNode result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Ast.AstNode buildPartial() {
        proto.Ast.AstNode result = new proto.Ast.AstNode(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.type_ = type_;
        result.name_ = name_;
        result.fullName_ = fullName_;
        result.baseType_ = baseType_;
        result.module_ = module_;
        result.value_ = value_;
        result.definition_ = definition_;
        if (argNodesBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            argNodes_ = java.util.Collections.unmodifiableList(argNodes_);
            bitField0_ = (bitField0_ & ~0x00000080);
          }
          result.argNodes_ = argNodes_;
        } else {
          result.argNodes_ = argNodesBuilder_.build();
        }
        if (((bitField0_ & 0x00000100) == 0x00000100)) {
          arguments_ = arguments_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000100);
        }
        result.arguments_ = arguments_;
        result.source_ = source_;
        if (rangeBuilder_ == null) {
          result.range_ = range_;
        } else {
          result.range_ = rangeBuilder_.build();
        }
        result.id_ = id_;
        result.functionality_ = functionality_;
        if (accurateFunctionalityCase_ == 14) {
          result.accurateFunctionality_ = accurateFunctionality_;
        }
        if (accurateFunctionalityCase_ == 15) {
          result.accurateFunctionality_ = accurateFunctionality_;
        }
        if (accurateFunctionalityCase_ == 16) {
          result.accurateFunctionality_ = accurateFunctionality_;
        }
        if (accurateFunctionalityCase_ == 17) {
          result.accurateFunctionality_ = accurateFunctionality_;
        }
        if (childNodesBuilder_ == null) {
          if (((bitField0_ & 0x00020000) == 0x00020000)) {
            childNodes_ = java.util.Collections.unmodifiableList(childNodes_);
            bitField0_ = (bitField0_ & ~0x00020000);
          }
          result.childNodes_ = childNodes_;
        } else {
          result.childNodes_ = childNodesBuilder_.build();
        }
        result.instantiatable_ = instantiatable_;
        result.bitField0_ = to_bitField0_;
        result.accurateFunctionalityCase_ = accurateFunctionalityCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof proto.Ast.AstNode) {
          return mergeFrom((proto.Ast.AstNode)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Ast.AstNode other) {
        if (other == proto.Ast.AstNode.getDefaultInstance()) return this;
        if (other.type_ != 0) {
          setTypeValue(other.getTypeValue());
        }
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.getFullName().isEmpty()) {
          fullName_ = other.fullName_;
          onChanged();
        }
        if (!other.getBaseType().isEmpty()) {
          baseType_ = other.baseType_;
          onChanged();
        }
        if (!other.getModule().isEmpty()) {
          module_ = other.module_;
          onChanged();
        }
        if (!other.getValue().isEmpty()) {
          value_ = other.value_;
          onChanged();
        }
        if (!other.getDefinition().isEmpty()) {
          definition_ = other.definition_;
          onChanged();
        }
        if (argNodesBuilder_ == null) {
          if (!other.argNodes_.isEmpty()) {
            if (argNodes_.isEmpty()) {
              argNodes_ = other.argNodes_;
              bitField0_ = (bitField0_ & ~0x00000080);
            } else {
              ensureArgNodesIsMutable();
              argNodes_.addAll(other.argNodes_);
            }
            onChanged();
          }
        } else {
          if (!other.argNodes_.isEmpty()) {
            if (argNodesBuilder_.isEmpty()) {
              argNodesBuilder_.dispose();
              argNodesBuilder_ = null;
              argNodes_ = other.argNodes_;
              bitField0_ = (bitField0_ & ~0x00000080);
              argNodesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getArgNodesFieldBuilder() : null;
            } else {
              argNodesBuilder_.addAllMessages(other.argNodes_);
            }
          }
        }
        if (!other.arguments_.isEmpty()) {
          if (arguments_.isEmpty()) {
            arguments_ = other.arguments_;
            bitField0_ = (bitField0_ & ~0x00000100);
          } else {
            ensureArgumentsIsMutable();
            arguments_.addAll(other.arguments_);
          }
          onChanged();
        }
        if (!other.getSource().isEmpty()) {
          source_ = other.source_;
          onChanged();
        }
        if (other.hasRange()) {
          mergeRange(other.getRange());
        }
        if (other.getId() != 0) {
          setId(other.getId());
        }
        if (other.functionality_ != 0) {
          setFunctionalityValue(other.getFunctionalityValue());
        }
        if (childNodesBuilder_ == null) {
          if (!other.childNodes_.isEmpty()) {
            if (childNodes_.isEmpty()) {
              childNodes_ = other.childNodes_;
              bitField0_ = (bitField0_ & ~0x00020000);
            } else {
              ensureChildNodesIsMutable();
              childNodes_.addAll(other.childNodes_);
            }
            onChanged();
          }
        } else {
          if (!other.childNodes_.isEmpty()) {
            if (childNodesBuilder_.isEmpty()) {
              childNodesBuilder_.dispose();
              childNodesBuilder_ = null;
              childNodes_ = other.childNodes_;
              bitField0_ = (bitField0_ & ~0x00020000);
              childNodesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getChildNodesFieldBuilder() : null;
            } else {
              childNodesBuilder_.addAllMessages(other.childNodes_);
            }
          }
        }
        if (other.getInstantiatable() != false) {
          setInstantiatable(other.getInstantiatable());
        }
        switch (other.getAccurateFunctionalityCase()) {
          case SOURCE_TYPE: {
            setSourceTypeValue(other.getSourceTypeValue());
            break;
          }
          case SINK_TYPE: {
            setSinkTypeValue(other.getSinkTypeValue());
            break;
          }
          case DANGER_TYPE: {
            setDangerTypeValue(other.getDangerTypeValue());
            break;
          }
          case PROPAGATE_TYPE: {
            setPropagateTypeValue(other.getPropagateTypeValue());
            break;
          }
          case ACCURATEFUNCTIONALITY_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        proto.Ast.AstNode parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Ast.AstNode) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int accurateFunctionalityCase_ = 0;
      private java.lang.Object accurateFunctionality_;
      public AccurateFunctionalityCase
          getAccurateFunctionalityCase() {
        return AccurateFunctionalityCase.forNumber(
            accurateFunctionalityCase_);
      }

      public Builder clearAccurateFunctionality() {
        accurateFunctionalityCase_ = 0;
        accurateFunctionality_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private int type_ = 0;
      /**
       * <code>.proto.AstNode.NodeType type = 1;</code>
       */
      public int getTypeValue() {
        return type_;
      }
      /**
       * <code>.proto.AstNode.NodeType type = 1;</code>
       */
      public Builder setTypeValue(int value) {
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.proto.AstNode.NodeType type = 1;</code>
       */
      public proto.Ast.AstNode.NodeType getType() {
        @SuppressWarnings("deprecation")
        proto.Ast.AstNode.NodeType result = proto.Ast.AstNode.NodeType.valueOf(type_);
        return result == null ? proto.Ast.AstNode.NodeType.UNRECOGNIZED : result;
      }
      /**
       * <code>.proto.AstNode.NodeType type = 1;</code>
       */
      public Builder setType(proto.Ast.AstNode.NodeType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        type_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.proto.AstNode.NodeType type = 1;</code>
       */
      public Builder clearType() {
        
        type_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <code>string name = 2;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string name = 2;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string name = 2;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string name = 2;</code>
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>string name = 2;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object fullName_ = "";
      /**
       * <code>string full_name = 3;</code>
       */
      public java.lang.String getFullName() {
        java.lang.Object ref = fullName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          fullName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string full_name = 3;</code>
       */
      public com.google.protobuf.ByteString
          getFullNameBytes() {
        java.lang.Object ref = fullName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          fullName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string full_name = 3;</code>
       */
      public Builder setFullName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        fullName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string full_name = 3;</code>
       */
      public Builder clearFullName() {
        
        fullName_ = getDefaultInstance().getFullName();
        onChanged();
        return this;
      }
      /**
       * <code>string full_name = 3;</code>
       */
      public Builder setFullNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        fullName_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object baseType_ = "";
      /**
       * <code>string base_type = 4;</code>
       */
      public java.lang.String getBaseType() {
        java.lang.Object ref = baseType_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          baseType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string base_type = 4;</code>
       */
      public com.google.protobuf.ByteString
          getBaseTypeBytes() {
        java.lang.Object ref = baseType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          baseType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string base_type = 4;</code>
       */
      public Builder setBaseType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        baseType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string base_type = 4;</code>
       */
      public Builder clearBaseType() {
        
        baseType_ = getDefaultInstance().getBaseType();
        onChanged();
        return this;
      }
      /**
       * <code>string base_type = 4;</code>
       */
      public Builder setBaseTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        baseType_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object module_ = "";
      /**
       * <pre>
       * The module name used to include the base class/type
       * </pre>
       *
       * <code>string module = 5;</code>
       */
      public java.lang.String getModule() {
        java.lang.Object ref = module_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          module_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The module name used to include the base class/type
       * </pre>
       *
       * <code>string module = 5;</code>
       */
      public com.google.protobuf.ByteString
          getModuleBytes() {
        java.lang.Object ref = module_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          module_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The module name used to include the base class/type
       * </pre>
       *
       * <code>string module = 5;</code>
       */
      public Builder setModule(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        module_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The module name used to include the base class/type
       * </pre>
       *
       * <code>string module = 5;</code>
       */
      public Builder clearModule() {
        
        module_ = getDefaultInstance().getModule();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The module name used to include the base class/type
       * </pre>
       *
       * <code>string module = 5;</code>
       */
      public Builder setModuleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        module_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object value_ = "";
      /**
       * <pre>
       * The right value if current ast node is an assign expression
       * </pre>
       *
       * <code>string value = 6;</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          value_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The right value if current ast node is an assign expression
       * </pre>
       *
       * <code>string value = 6;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The right value if current ast node is an assign expression
       * </pre>
       *
       * <code>string value = 6;</code>
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The right value if current ast node is an assign expression
       * </pre>
       *
       * <code>string value = 6;</code>
       */
      public Builder clearValue() {
        
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The right value if current ast node is an assign expression
       * </pre>
       *
       * <code>string value = 6;</code>
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        value_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object definition_ = "";
      /**
       * <pre>
       * The definition if current ast node is class/function definition
       * </pre>
       *
       * <code>string definition = 7;</code>
       */
      public java.lang.String getDefinition() {
        java.lang.Object ref = definition_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          definition_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The definition if current ast node is class/function definition
       * </pre>
       *
       * <code>string definition = 7;</code>
       */
      public com.google.protobuf.ByteString
          getDefinitionBytes() {
        java.lang.Object ref = definition_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          definition_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The definition if current ast node is class/function definition
       * </pre>
       *
       * <code>string definition = 7;</code>
       */
      public Builder setDefinition(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        definition_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The definition if current ast node is class/function definition
       * </pre>
       *
       * <code>string definition = 7;</code>
       */
      public Builder clearDefinition() {
        
        definition_ = getDefaultInstance().getDefinition();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The definition if current ast node is class/function definition
       * </pre>
       *
       * <code>string definition = 7;</code>
       */
      public Builder setDefinitionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        definition_ = value;
        onChanged();
        return this;
      }

      private java.util.List<proto.Ast.AstNode> argNodes_ =
        java.util.Collections.emptyList();
      private void ensureArgNodesIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          argNodes_ = new java.util.ArrayList<proto.Ast.AstNode>(argNodes_);
          bitField0_ |= 0x00000080;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> argNodesBuilder_;

      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public java.util.List<proto.Ast.AstNode> getArgNodesList() {
        if (argNodesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(argNodes_);
        } else {
          return argNodesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public int getArgNodesCount() {
        if (argNodesBuilder_ == null) {
          return argNodes_.size();
        } else {
          return argNodesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public proto.Ast.AstNode getArgNodes(int index) {
        if (argNodesBuilder_ == null) {
          return argNodes_.get(index);
        } else {
          return argNodesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public Builder setArgNodes(
          int index, proto.Ast.AstNode value) {
        if (argNodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArgNodesIsMutable();
          argNodes_.set(index, value);
          onChanged();
        } else {
          argNodesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public Builder setArgNodes(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (argNodesBuilder_ == null) {
          ensureArgNodesIsMutable();
          argNodes_.set(index, builderForValue.build());
          onChanged();
        } else {
          argNodesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public Builder addArgNodes(proto.Ast.AstNode value) {
        if (argNodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArgNodesIsMutable();
          argNodes_.add(value);
          onChanged();
        } else {
          argNodesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public Builder addArgNodes(
          int index, proto.Ast.AstNode value) {
        if (argNodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArgNodesIsMutable();
          argNodes_.add(index, value);
          onChanged();
        } else {
          argNodesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public Builder addArgNodes(
          proto.Ast.AstNode.Builder builderForValue) {
        if (argNodesBuilder_ == null) {
          ensureArgNodesIsMutable();
          argNodes_.add(builderForValue.build());
          onChanged();
        } else {
          argNodesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public Builder addArgNodes(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (argNodesBuilder_ == null) {
          ensureArgNodesIsMutable();
          argNodes_.add(index, builderForValue.build());
          onChanged();
        } else {
          argNodesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public Builder addAllArgNodes(
          java.lang.Iterable<? extends proto.Ast.AstNode> values) {
        if (argNodesBuilder_ == null) {
          ensureArgNodesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, argNodes_);
          onChanged();
        } else {
          argNodesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public Builder clearArgNodes() {
        if (argNodesBuilder_ == null) {
          argNodes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
          onChanged();
        } else {
          argNodesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public Builder removeArgNodes(int index) {
        if (argNodesBuilder_ == null) {
          ensureArgNodesIsMutable();
          argNodes_.remove(index);
          onChanged();
        } else {
          argNodesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public proto.Ast.AstNode.Builder getArgNodesBuilder(
          int index) {
        return getArgNodesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public proto.Ast.AstNodeOrBuilder getArgNodesOrBuilder(
          int index) {
        if (argNodesBuilder_ == null) {
          return argNodes_.get(index);  } else {
          return argNodesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
           getArgNodesOrBuilderList() {
        if (argNodesBuilder_ != null) {
          return argNodesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(argNodes_);
        }
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public proto.Ast.AstNode.Builder addArgNodesBuilder() {
        return getArgNodesFieldBuilder().addBuilder(
            proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public proto.Ast.AstNode.Builder addArgNodesBuilder(
          int index) {
        return getArgNodesFieldBuilder().addBuilder(
            index, proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <pre>
       **
       * The arg nodes used for matching APIs, id indicates their index, name/value can be set.
       * (1) If value is specified, the parent node should be kept only if the value matches.
       * (2) If only value/index is specified, the specified args are sinks in taint analysis.
       * </pre>
       *
       * <code>repeated .proto.AstNode arg_nodes = 8;</code>
       */
      public java.util.List<proto.Ast.AstNode.Builder> 
           getArgNodesBuilderList() {
        return getArgNodesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getArgNodesFieldBuilder() {
        if (argNodesBuilder_ == null) {
          argNodesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  argNodes_,
                  ((bitField0_ & 0x00000080) == 0x00000080),
                  getParentForChildren(),
                  isClean());
          argNodes_ = null;
        }
        return argNodesBuilder_;
      }

      private com.google.protobuf.LazyStringList arguments_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureArgumentsIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          arguments_ = new com.google.protobuf.LazyStringArrayList(arguments_);
          bitField0_ |= 0x00000100;
         }
      }
      /**
       * <pre>
       * The value of arguments if current ast node is function calls
       * </pre>
       *
       * <code>repeated string arguments = 9;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getArgumentsList() {
        return arguments_.getUnmodifiableView();
      }
      /**
       * <pre>
       * The value of arguments if current ast node is function calls
       * </pre>
       *
       * <code>repeated string arguments = 9;</code>
       */
      public int getArgumentsCount() {
        return arguments_.size();
      }
      /**
       * <pre>
       * The value of arguments if current ast node is function calls
       * </pre>
       *
       * <code>repeated string arguments = 9;</code>
       */
      public java.lang.String getArguments(int index) {
        return arguments_.get(index);
      }
      /**
       * <pre>
       * The value of arguments if current ast node is function calls
       * </pre>
       *
       * <code>repeated string arguments = 9;</code>
       */
      public com.google.protobuf.ByteString
          getArgumentsBytes(int index) {
        return arguments_.getByteString(index);
      }
      /**
       * <pre>
       * The value of arguments if current ast node is function calls
       * </pre>
       *
       * <code>repeated string arguments = 9;</code>
       */
      public Builder setArguments(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureArgumentsIsMutable();
        arguments_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The value of arguments if current ast node is function calls
       * </pre>
       *
       * <code>repeated string arguments = 9;</code>
       */
      public Builder addArguments(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureArgumentsIsMutable();
        arguments_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The value of arguments if current ast node is function calls
       * </pre>
       *
       * <code>repeated string arguments = 9;</code>
       */
      public Builder addAllArguments(
          java.lang.Iterable<java.lang.String> values) {
        ensureArgumentsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, arguments_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The value of arguments if current ast node is function calls
       * </pre>
       *
       * <code>repeated string arguments = 9;</code>
       */
      public Builder clearArguments() {
        arguments_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The value of arguments if current ast node is function calls
       * </pre>
       *
       * <code>repeated string arguments = 9;</code>
       */
      public Builder addArgumentsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureArgumentsIsMutable();
        arguments_.add(value);
        onChanged();
        return this;
      }

      private java.lang.Object source_ = "";
      /**
       * <pre>
       * All the statements related to current ast node
       * </pre>
       *
       * <code>string source = 10;</code>
       */
      public java.lang.String getSource() {
        java.lang.Object ref = source_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          source_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * All the statements related to current ast node
       * </pre>
       *
       * <code>string source = 10;</code>
       */
      public com.google.protobuf.ByteString
          getSourceBytes() {
        java.lang.Object ref = source_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          source_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * All the statements related to current ast node
       * </pre>
       *
       * <code>string source = 10;</code>
       */
      public Builder setSource(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        source_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * All the statements related to current ast node
       * </pre>
       *
       * <code>string source = 10;</code>
       */
      public Builder clearSource() {
        
        source_ = getDefaultInstance().getSource();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * All the statements related to current ast node
       * </pre>
       *
       * <code>string source = 10;</code>
       */
      public Builder setSourceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        source_ = value;
        onChanged();
        return this;
      }

      private proto.Ast.SourceRange range_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.SourceRange, proto.Ast.SourceRange.Builder, proto.Ast.SourceRangeOrBuilder> rangeBuilder_;
      /**
       * <pre>
       * Collect the range/locations of the node
       * </pre>
       *
       * <code>.proto.SourceRange range = 11;</code>
       */
      public boolean hasRange() {
        return rangeBuilder_ != null || range_ != null;
      }
      /**
       * <pre>
       * Collect the range/locations of the node
       * </pre>
       *
       * <code>.proto.SourceRange range = 11;</code>
       */
      public proto.Ast.SourceRange getRange() {
        if (rangeBuilder_ == null) {
          return range_ == null ? proto.Ast.SourceRange.getDefaultInstance() : range_;
        } else {
          return rangeBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Collect the range/locations of the node
       * </pre>
       *
       * <code>.proto.SourceRange range = 11;</code>
       */
      public Builder setRange(proto.Ast.SourceRange value) {
        if (rangeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          range_ = value;
          onChanged();
        } else {
          rangeBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * Collect the range/locations of the node
       * </pre>
       *
       * <code>.proto.SourceRange range = 11;</code>
       */
      public Builder setRange(
          proto.Ast.SourceRange.Builder builderForValue) {
        if (rangeBuilder_ == null) {
          range_ = builderForValue.build();
          onChanged();
        } else {
          rangeBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * Collect the range/locations of the node
       * </pre>
       *
       * <code>.proto.SourceRange range = 11;</code>
       */
      public Builder mergeRange(proto.Ast.SourceRange value) {
        if (rangeBuilder_ == null) {
          if (range_ != null) {
            range_ =
              proto.Ast.SourceRange.newBuilder(range_).mergeFrom(value).buildPartial();
          } else {
            range_ = value;
          }
          onChanged();
        } else {
          rangeBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * Collect the range/locations of the node
       * </pre>
       *
       * <code>.proto.SourceRange range = 11;</code>
       */
      public Builder clearRange() {
        if (rangeBuilder_ == null) {
          range_ = null;
          onChanged();
        } else {
          range_ = null;
          rangeBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * Collect the range/locations of the node
       * </pre>
       *
       * <code>.proto.SourceRange range = 11;</code>
       */
      public proto.Ast.SourceRange.Builder getRangeBuilder() {
        
        onChanged();
        return getRangeFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Collect the range/locations of the node
       * </pre>
       *
       * <code>.proto.SourceRange range = 11;</code>
       */
      public proto.Ast.SourceRangeOrBuilder getRangeOrBuilder() {
        if (rangeBuilder_ != null) {
          return rangeBuilder_.getMessageOrBuilder();
        } else {
          return range_ == null ?
              proto.Ast.SourceRange.getDefaultInstance() : range_;
        }
      }
      /**
       * <pre>
       * Collect the range/locations of the node
       * </pre>
       *
       * <code>.proto.SourceRange range = 11;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.SourceRange, proto.Ast.SourceRange.Builder, proto.Ast.SourceRangeOrBuilder> 
          getRangeFieldBuilder() {
        if (rangeBuilder_ == null) {
          rangeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Ast.SourceRange, proto.Ast.SourceRange.Builder, proto.Ast.SourceRangeOrBuilder>(
                  getRange(),
                  getParentForChildren(),
                  isClean());
          range_ = null;
        }
        return rangeBuilder_;
      }

      private int id_ ;
      /**
       * <pre>
       * Map each AstNode to a unique number, and allow flexible constraints expressed in SMT.
       * </pre>
       *
       * <code>int32 id = 12;</code>
       */
      public int getId() {
        return id_;
      }
      /**
       * <pre>
       * Map each AstNode to a unique number, and allow flexible constraints expressed in SMT.
       * </pre>
       *
       * <code>int32 id = 12;</code>
       */
      public Builder setId(int value) {
        
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Map each AstNode to a unique number, and allow flexible constraints expressed in SMT.
       * </pre>
       *
       * <code>int32 id = 12;</code>
       */
      public Builder clearId() {
        
        id_ = 0;
        onChanged();
        return this;
      }

      private int functionality_ = 0;
      /**
       * <pre>
       * Each API should either be source, sink or danger. Note: danger APIs are mostly sinks, e.g. rmdir.
       * </pre>
       *
       * <code>.proto.Functionality functionality = 13;</code>
       */
      public int getFunctionalityValue() {
        return functionality_;
      }
      /**
       * <pre>
       * Each API should either be source, sink or danger. Note: danger APIs are mostly sinks, e.g. rmdir.
       * </pre>
       *
       * <code>.proto.Functionality functionality = 13;</code>
       */
      public Builder setFunctionalityValue(int value) {
        functionality_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Each API should either be source, sink or danger. Note: danger APIs are mostly sinks, e.g. rmdir.
       * </pre>
       *
       * <code>.proto.Functionality functionality = 13;</code>
       */
      public proto.Ast.Functionality getFunctionality() {
        @SuppressWarnings("deprecation")
        proto.Ast.Functionality result = proto.Ast.Functionality.valueOf(functionality_);
        return result == null ? proto.Ast.Functionality.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * Each API should either be source, sink or danger. Note: danger APIs are mostly sinks, e.g. rmdir.
       * </pre>
       *
       * <code>.proto.Functionality functionality = 13;</code>
       */
      public Builder setFunctionality(proto.Ast.Functionality value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        functionality_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Each API should either be source, sink or danger. Note: danger APIs are mostly sinks, e.g. rmdir.
       * </pre>
       *
       * <code>.proto.Functionality functionality = 13;</code>
       */
      public Builder clearFunctionality() {
        
        functionality_ = 0;
        onChanged();
        return this;
      }

      /**
       * <code>.proto.SourceType source_type = 14;</code>
       */
      public int getSourceTypeValue() {
        if (accurateFunctionalityCase_ == 14) {
          return ((java.lang.Integer) accurateFunctionality_).intValue();
        }
        return 0;
      }
      /**
       * <code>.proto.SourceType source_type = 14;</code>
       */
      public Builder setSourceTypeValue(int value) {
        accurateFunctionalityCase_ = 14;
        accurateFunctionality_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.proto.SourceType source_type = 14;</code>
       */
      public proto.Ast.SourceType getSourceType() {
        if (accurateFunctionalityCase_ == 14) {
          @SuppressWarnings("deprecation")
          proto.Ast.SourceType result = proto.Ast.SourceType.valueOf(
              (java.lang.Integer) accurateFunctionality_);
          return result == null ? proto.Ast.SourceType.UNRECOGNIZED : result;
        }
        return proto.Ast.SourceType.SOURCE_UNCLASSIFIED;
      }
      /**
       * <code>.proto.SourceType source_type = 14;</code>
       */
      public Builder setSourceType(proto.Ast.SourceType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        accurateFunctionalityCase_ = 14;
        accurateFunctionality_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.proto.SourceType source_type = 14;</code>
       */
      public Builder clearSourceType() {
        if (accurateFunctionalityCase_ == 14) {
          accurateFunctionalityCase_ = 0;
          accurateFunctionality_ = null;
          onChanged();
        }
        return this;
      }

      /**
       * <code>.proto.SinkType sink_type = 15;</code>
       */
      public int getSinkTypeValue() {
        if (accurateFunctionalityCase_ == 15) {
          return ((java.lang.Integer) accurateFunctionality_).intValue();
        }
        return 0;
      }
      /**
       * <code>.proto.SinkType sink_type = 15;</code>
       */
      public Builder setSinkTypeValue(int value) {
        accurateFunctionalityCase_ = 15;
        accurateFunctionality_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.proto.SinkType sink_type = 15;</code>
       */
      public proto.Ast.SinkType getSinkType() {
        if (accurateFunctionalityCase_ == 15) {
          @SuppressWarnings("deprecation")
          proto.Ast.SinkType result = proto.Ast.SinkType.valueOf(
              (java.lang.Integer) accurateFunctionality_);
          return result == null ? proto.Ast.SinkType.UNRECOGNIZED : result;
        }
        return proto.Ast.SinkType.SINK_UNCLASSIFIED;
      }
      /**
       * <code>.proto.SinkType sink_type = 15;</code>
       */
      public Builder setSinkType(proto.Ast.SinkType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        accurateFunctionalityCase_ = 15;
        accurateFunctionality_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.proto.SinkType sink_type = 15;</code>
       */
      public Builder clearSinkType() {
        if (accurateFunctionalityCase_ == 15) {
          accurateFunctionalityCase_ = 0;
          accurateFunctionality_ = null;
          onChanged();
        }
        return this;
      }

      /**
       * <code>.proto.DangerType danger_type = 16;</code>
       */
      public int getDangerTypeValue() {
        if (accurateFunctionalityCase_ == 16) {
          return ((java.lang.Integer) accurateFunctionality_).intValue();
        }
        return 0;
      }
      /**
       * <code>.proto.DangerType danger_type = 16;</code>
       */
      public Builder setDangerTypeValue(int value) {
        accurateFunctionalityCase_ = 16;
        accurateFunctionality_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.proto.DangerType danger_type = 16;</code>
       */
      public proto.Ast.DangerType getDangerType() {
        if (accurateFunctionalityCase_ == 16) {
          @SuppressWarnings("deprecation")
          proto.Ast.DangerType result = proto.Ast.DangerType.valueOf(
              (java.lang.Integer) accurateFunctionality_);
          return result == null ? proto.Ast.DangerType.UNRECOGNIZED : result;
        }
        return proto.Ast.DangerType.DANGER_UNCLASSIFIED_DANGER;
      }
      /**
       * <code>.proto.DangerType danger_type = 16;</code>
       */
      public Builder setDangerType(proto.Ast.DangerType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        accurateFunctionalityCase_ = 16;
        accurateFunctionality_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.proto.DangerType danger_type = 16;</code>
       */
      public Builder clearDangerType() {
        if (accurateFunctionalityCase_ == 16) {
          accurateFunctionalityCase_ = 0;
          accurateFunctionality_ = null;
          onChanged();
        }
        return this;
      }

      /**
       * <code>.proto.PropagateType propagate_type = 17;</code>
       */
      public int getPropagateTypeValue() {
        if (accurateFunctionalityCase_ == 17) {
          return ((java.lang.Integer) accurateFunctionality_).intValue();
        }
        return 0;
      }
      /**
       * <code>.proto.PropagateType propagate_type = 17;</code>
       */
      public Builder setPropagateTypeValue(int value) {
        accurateFunctionalityCase_ = 17;
        accurateFunctionality_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.proto.PropagateType propagate_type = 17;</code>
       */
      public proto.Ast.PropagateType getPropagateType() {
        if (accurateFunctionalityCase_ == 17) {
          @SuppressWarnings("deprecation")
          proto.Ast.PropagateType result = proto.Ast.PropagateType.valueOf(
              (java.lang.Integer) accurateFunctionality_);
          return result == null ? proto.Ast.PropagateType.UNRECOGNIZED : result;
        }
        return proto.Ast.PropagateType.PROPAGATE_UNCLASSIFIED;
      }
      /**
       * <code>.proto.PropagateType propagate_type = 17;</code>
       */
      public Builder setPropagateType(proto.Ast.PropagateType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        accurateFunctionalityCase_ = 17;
        accurateFunctionality_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.proto.PropagateType propagate_type = 17;</code>
       */
      public Builder clearPropagateType() {
        if (accurateFunctionalityCase_ == 17) {
          accurateFunctionalityCase_ = 0;
          accurateFunctionality_ = null;
          onChanged();
        }
        return this;
      }

      private java.util.List<proto.Ast.AstNode> childNodes_ =
        java.util.Collections.emptyList();
      private void ensureChildNodesIsMutable() {
        if (!((bitField0_ & 0x00020000) == 0x00020000)) {
          childNodes_ = new java.util.ArrayList<proto.Ast.AstNode>(childNodes_);
          bitField0_ |= 0x00020000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> childNodesBuilder_;

      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public java.util.List<proto.Ast.AstNode> getChildNodesList() {
        if (childNodesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(childNodes_);
        } else {
          return childNodesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public int getChildNodesCount() {
        if (childNodesBuilder_ == null) {
          return childNodes_.size();
        } else {
          return childNodesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public proto.Ast.AstNode getChildNodes(int index) {
        if (childNodesBuilder_ == null) {
          return childNodes_.get(index);
        } else {
          return childNodesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public Builder setChildNodes(
          int index, proto.Ast.AstNode value) {
        if (childNodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildNodesIsMutable();
          childNodes_.set(index, value);
          onChanged();
        } else {
          childNodesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public Builder setChildNodes(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (childNodesBuilder_ == null) {
          ensureChildNodesIsMutable();
          childNodes_.set(index, builderForValue.build());
          onChanged();
        } else {
          childNodesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public Builder addChildNodes(proto.Ast.AstNode value) {
        if (childNodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildNodesIsMutable();
          childNodes_.add(value);
          onChanged();
        } else {
          childNodesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public Builder addChildNodes(
          int index, proto.Ast.AstNode value) {
        if (childNodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildNodesIsMutable();
          childNodes_.add(index, value);
          onChanged();
        } else {
          childNodesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public Builder addChildNodes(
          proto.Ast.AstNode.Builder builderForValue) {
        if (childNodesBuilder_ == null) {
          ensureChildNodesIsMutable();
          childNodes_.add(builderForValue.build());
          onChanged();
        } else {
          childNodesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public Builder addChildNodes(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (childNodesBuilder_ == null) {
          ensureChildNodesIsMutable();
          childNodes_.add(index, builderForValue.build());
          onChanged();
        } else {
          childNodesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public Builder addAllChildNodes(
          java.lang.Iterable<? extends proto.Ast.AstNode> values) {
        if (childNodesBuilder_ == null) {
          ensureChildNodesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, childNodes_);
          onChanged();
        } else {
          childNodesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public Builder clearChildNodes() {
        if (childNodesBuilder_ == null) {
          childNodes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00020000);
          onChanged();
        } else {
          childNodesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public Builder removeChildNodes(int index) {
        if (childNodesBuilder_ == null) {
          ensureChildNodesIsMutable();
          childNodes_.remove(index);
          onChanged();
        } else {
          childNodesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public proto.Ast.AstNode.Builder getChildNodesBuilder(
          int index) {
        return getChildNodesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public proto.Ast.AstNodeOrBuilder getChildNodesOrBuilder(
          int index) {
        if (childNodesBuilder_ == null) {
          return childNodes_.get(index);  } else {
          return childNodesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
           getChildNodesOrBuilderList() {
        if (childNodesBuilder_ != null) {
          return childNodesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(childNodes_);
        }
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public proto.Ast.AstNode.Builder addChildNodesBuilder() {
        return getChildNodesFieldBuilder().addBuilder(
            proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public proto.Ast.AstNode.Builder addChildNodesBuilder(
          int index) {
        return getChildNodesFieldBuilder().addBuilder(
            index, proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <pre>
       * Record children of the current node
       * </pre>
       *
       * <code>repeated .proto.AstNode child_nodes = 18;</code>
       */
      public java.util.List<proto.Ast.AstNode.Builder> 
           getChildNodesBuilderList() {
        return getChildNodesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getChildNodesFieldBuilder() {
        if (childNodesBuilder_ == null) {
          childNodesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  childNodes_,
                  ((bitField0_ & 0x00020000) == 0x00020000),
                  getParentForChildren(),
                  isClean());
          childNodes_ = null;
        }
        return childNodesBuilder_;
      }

      private boolean instantiatable_ ;
      /**
       * <pre>
       * Whether the base_type can be instantiated or not. This can be used in func_only mode to improve API matching.
       * </pre>
       *
       * <code>bool instantiatable = 19;</code>
       */
      public boolean getInstantiatable() {
        return instantiatable_;
      }
      /**
       * <pre>
       * Whether the base_type can be instantiated or not. This can be used in func_only mode to improve API matching.
       * </pre>
       *
       * <code>bool instantiatable = 19;</code>
       */
      public Builder setInstantiatable(boolean value) {
        
        instantiatable_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether the base_type can be instantiated or not. This can be used in func_only mode to improve API matching.
       * </pre>
       *
       * <code>bool instantiatable = 19;</code>
       */
      public Builder clearInstantiatable() {
        
        instantiatable_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:proto.AstNode)
    }

    // @@protoc_insertion_point(class_scope:proto.AstNode)
    private static final proto.Ast.AstNode DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Ast.AstNode();
    }

    public static proto.Ast.AstNode getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AstNode>
        PARSER = new com.google.protobuf.AbstractParser<AstNode>() {
      @java.lang.Override
      public AstNode parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AstNode(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<AstNode> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AstNode> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public proto.Ast.AstNode getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AstLookupConfigOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.AstLookupConfig)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * List the APIs as a list of pre-defined ast nodes
     * </pre>
     *
     * <code>repeated .proto.AstNode apis = 1;</code>
     */
    java.util.List<proto.Ast.AstNode> 
        getApisList();
    /**
     * <pre>
     * List the APIs as a list of pre-defined ast nodes
     * </pre>
     *
     * <code>repeated .proto.AstNode apis = 1;</code>
     */
    proto.Ast.AstNode getApis(int index);
    /**
     * <pre>
     * List the APIs as a list of pre-defined ast nodes
     * </pre>
     *
     * <code>repeated .proto.AstNode apis = 1;</code>
     */
    int getApisCount();
    /**
     * <pre>
     * List the APIs as a list of pre-defined ast nodes
     * </pre>
     *
     * <code>repeated .proto.AstNode apis = 1;</code>
     */
    java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getApisOrBuilderList();
    /**
     * <pre>
     * List the APIs as a list of pre-defined ast nodes
     * </pre>
     *
     * <code>repeated .proto.AstNode apis = 1;</code>
     */
    proto.Ast.AstNodeOrBuilder getApisOrBuilder(
        int index);

    /**
     * <pre>
     * Save generic feature result
     * </pre>
     *
     * <code>bool save_feature = 2;</code>
     */
    boolean getSaveFeature();

    /**
     * <pre>
     * SMT formula of node ids, interpretable by Z3, allow flexible constraints on the ast nodes
     * https://rise4fun.com/z3/tutorialcontent/sequences
     * </pre>
     *
     * <code>string smt_formula = 3;</code>
     */
    java.lang.String getSmtFormula();
    /**
     * <pre>
     * SMT formula of node ids, interpretable by Z3, allow flexible constraints on the ast nodes
     * https://rise4fun.com/z3/tutorialcontent/sequences
     * </pre>
     *
     * <code>string smt_formula = 3;</code>
     */
    com.google.protobuf.ByteString
        getSmtFormulaBytes();

    /**
     * <pre>
     * The satisfiability evaluation result, filled after evaluation. True means we will investigate further on this package.
     * </pre>
     *
     * <code>bool smt_satisfied = 4;</code>
     */
    boolean getSmtSatisfied();

    /**
     * <pre>
     * Allow any base_type and match only function name. This is a temporary to dynamic types in scripting languages.
     * </pre>
     *
     * <code>bool func_only = 5;</code>
     */
    boolean getFuncOnly();
  }
  /**
   * Protobuf type {@code proto.AstLookupConfig}
   */
  public  static final class AstLookupConfig extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.AstLookupConfig)
      AstLookupConfigOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AstLookupConfig.newBuilder() to construct.
    private AstLookupConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AstLookupConfig() {
      apis_ = java.util.Collections.emptyList();
      saveFeature_ = false;
      smtFormula_ = "";
      smtSatisfied_ = false;
      funcOnly_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AstLookupConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                apis_ = new java.util.ArrayList<proto.Ast.AstNode>();
                mutable_bitField0_ |= 0x00000001;
              }
              apis_.add(
                  input.readMessage(proto.Ast.AstNode.parser(), extensionRegistry));
              break;
            }
            case 16: {

              saveFeature_ = input.readBool();
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              smtFormula_ = s;
              break;
            }
            case 32: {

              smtSatisfied_ = input.readBool();
              break;
            }
            case 40: {

              funcOnly_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          apis_ = java.util.Collections.unmodifiableList(apis_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Ast.internal_static_proto_AstLookupConfig_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Ast.internal_static_proto_AstLookupConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Ast.AstLookupConfig.class, proto.Ast.AstLookupConfig.Builder.class);
    }

    private int bitField0_;
    public static final int APIS_FIELD_NUMBER = 1;
    private java.util.List<proto.Ast.AstNode> apis_;
    /**
     * <pre>
     * List the APIs as a list of pre-defined ast nodes
     * </pre>
     *
     * <code>repeated .proto.AstNode apis = 1;</code>
     */
    public java.util.List<proto.Ast.AstNode> getApisList() {
      return apis_;
    }
    /**
     * <pre>
     * List the APIs as a list of pre-defined ast nodes
     * </pre>
     *
     * <code>repeated .proto.AstNode apis = 1;</code>
     */
    public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getApisOrBuilderList() {
      return apis_;
    }
    /**
     * <pre>
     * List the APIs as a list of pre-defined ast nodes
     * </pre>
     *
     * <code>repeated .proto.AstNode apis = 1;</code>
     */
    public int getApisCount() {
      return apis_.size();
    }
    /**
     * <pre>
     * List the APIs as a list of pre-defined ast nodes
     * </pre>
     *
     * <code>repeated .proto.AstNode apis = 1;</code>
     */
    public proto.Ast.AstNode getApis(int index) {
      return apis_.get(index);
    }
    /**
     * <pre>
     * List the APIs as a list of pre-defined ast nodes
     * </pre>
     *
     * <code>repeated .proto.AstNode apis = 1;</code>
     */
    public proto.Ast.AstNodeOrBuilder getApisOrBuilder(
        int index) {
      return apis_.get(index);
    }

    public static final int SAVE_FEATURE_FIELD_NUMBER = 2;
    private boolean saveFeature_;
    /**
     * <pre>
     * Save generic feature result
     * </pre>
     *
     * <code>bool save_feature = 2;</code>
     */
    public boolean getSaveFeature() {
      return saveFeature_;
    }

    public static final int SMT_FORMULA_FIELD_NUMBER = 3;
    private volatile java.lang.Object smtFormula_;
    /**
     * <pre>
     * SMT formula of node ids, interpretable by Z3, allow flexible constraints on the ast nodes
     * https://rise4fun.com/z3/tutorialcontent/sequences
     * </pre>
     *
     * <code>string smt_formula = 3;</code>
     */
    public java.lang.String getSmtFormula() {
      java.lang.Object ref = smtFormula_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        smtFormula_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * SMT formula of node ids, interpretable by Z3, allow flexible constraints on the ast nodes
     * https://rise4fun.com/z3/tutorialcontent/sequences
     * </pre>
     *
     * <code>string smt_formula = 3;</code>
     */
    public com.google.protobuf.ByteString
        getSmtFormulaBytes() {
      java.lang.Object ref = smtFormula_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        smtFormula_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SMT_SATISFIED_FIELD_NUMBER = 4;
    private boolean smtSatisfied_;
    /**
     * <pre>
     * The satisfiability evaluation result, filled after evaluation. True means we will investigate further on this package.
     * </pre>
     *
     * <code>bool smt_satisfied = 4;</code>
     */
    public boolean getSmtSatisfied() {
      return smtSatisfied_;
    }

    public static final int FUNC_ONLY_FIELD_NUMBER = 5;
    private boolean funcOnly_;
    /**
     * <pre>
     * Allow any base_type and match only function name. This is a temporary to dynamic types in scripting languages.
     * </pre>
     *
     * <code>bool func_only = 5;</code>
     */
    public boolean getFuncOnly() {
      return funcOnly_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < apis_.size(); i++) {
        output.writeMessage(1, apis_.get(i));
      }
      if (saveFeature_ != false) {
        output.writeBool(2, saveFeature_);
      }
      if (!getSmtFormulaBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, smtFormula_);
      }
      if (smtSatisfied_ != false) {
        output.writeBool(4, smtSatisfied_);
      }
      if (funcOnly_ != false) {
        output.writeBool(5, funcOnly_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < apis_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, apis_.get(i));
      }
      if (saveFeature_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, saveFeature_);
      }
      if (!getSmtFormulaBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, smtFormula_);
      }
      if (smtSatisfied_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, smtSatisfied_);
      }
      if (funcOnly_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, funcOnly_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof proto.Ast.AstLookupConfig)) {
        return super.equals(obj);
      }
      proto.Ast.AstLookupConfig other = (proto.Ast.AstLookupConfig) obj;

      boolean result = true;
      result = result && getApisList()
          .equals(other.getApisList());
      result = result && (getSaveFeature()
          == other.getSaveFeature());
      result = result && getSmtFormula()
          .equals(other.getSmtFormula());
      result = result && (getSmtSatisfied()
          == other.getSmtSatisfied());
      result = result && (getFuncOnly()
          == other.getFuncOnly());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getApisCount() > 0) {
        hash = (37 * hash) + APIS_FIELD_NUMBER;
        hash = (53 * hash) + getApisList().hashCode();
      }
      hash = (37 * hash) + SAVE_FEATURE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getSaveFeature());
      hash = (37 * hash) + SMT_FORMULA_FIELD_NUMBER;
      hash = (53 * hash) + getSmtFormula().hashCode();
      hash = (37 * hash) + SMT_SATISFIED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getSmtSatisfied());
      hash = (37 * hash) + FUNC_ONLY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getFuncOnly());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.Ast.AstLookupConfig parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.AstLookupConfig parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.AstLookupConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.AstLookupConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.AstLookupConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.AstLookupConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.AstLookupConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.AstLookupConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.AstLookupConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.Ast.AstLookupConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.AstLookupConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.AstLookupConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(proto.Ast.AstLookupConfig prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code proto.AstLookupConfig}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.AstLookupConfig)
        proto.Ast.AstLookupConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Ast.internal_static_proto_AstLookupConfig_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Ast.internal_static_proto_AstLookupConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Ast.AstLookupConfig.class, proto.Ast.AstLookupConfig.Builder.class);
      }

      // Construct using proto.Ast.AstLookupConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getApisFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (apisBuilder_ == null) {
          apis_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          apisBuilder_.clear();
        }
        saveFeature_ = false;

        smtFormula_ = "";

        smtSatisfied_ = false;

        funcOnly_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Ast.internal_static_proto_AstLookupConfig_descriptor;
      }

      @java.lang.Override
      public proto.Ast.AstLookupConfig getDefaultInstanceForType() {
        return proto.Ast.AstLookupConfig.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Ast.AstLookupConfig build() {
        proto.Ast.AstLookupConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Ast.AstLookupConfig buildPartial() {
        proto.Ast.AstLookupConfig result = new proto.Ast.AstLookupConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (apisBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            apis_ = java.util.Collections.unmodifiableList(apis_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.apis_ = apis_;
        } else {
          result.apis_ = apisBuilder_.build();
        }
        result.saveFeature_ = saveFeature_;
        result.smtFormula_ = smtFormula_;
        result.smtSatisfied_ = smtSatisfied_;
        result.funcOnly_ = funcOnly_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof proto.Ast.AstLookupConfig) {
          return mergeFrom((proto.Ast.AstLookupConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Ast.AstLookupConfig other) {
        if (other == proto.Ast.AstLookupConfig.getDefaultInstance()) return this;
        if (apisBuilder_ == null) {
          if (!other.apis_.isEmpty()) {
            if (apis_.isEmpty()) {
              apis_ = other.apis_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureApisIsMutable();
              apis_.addAll(other.apis_);
            }
            onChanged();
          }
        } else {
          if (!other.apis_.isEmpty()) {
            if (apisBuilder_.isEmpty()) {
              apisBuilder_.dispose();
              apisBuilder_ = null;
              apis_ = other.apis_;
              bitField0_ = (bitField0_ & ~0x00000001);
              apisBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getApisFieldBuilder() : null;
            } else {
              apisBuilder_.addAllMessages(other.apis_);
            }
          }
        }
        if (other.getSaveFeature() != false) {
          setSaveFeature(other.getSaveFeature());
        }
        if (!other.getSmtFormula().isEmpty()) {
          smtFormula_ = other.smtFormula_;
          onChanged();
        }
        if (other.getSmtSatisfied() != false) {
          setSmtSatisfied(other.getSmtSatisfied());
        }
        if (other.getFuncOnly() != false) {
          setFuncOnly(other.getFuncOnly());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        proto.Ast.AstLookupConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Ast.AstLookupConfig) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<proto.Ast.AstNode> apis_ =
        java.util.Collections.emptyList();
      private void ensureApisIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          apis_ = new java.util.ArrayList<proto.Ast.AstNode>(apis_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> apisBuilder_;

      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public java.util.List<proto.Ast.AstNode> getApisList() {
        if (apisBuilder_ == null) {
          return java.util.Collections.unmodifiableList(apis_);
        } else {
          return apisBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public int getApisCount() {
        if (apisBuilder_ == null) {
          return apis_.size();
        } else {
          return apisBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public proto.Ast.AstNode getApis(int index) {
        if (apisBuilder_ == null) {
          return apis_.get(index);
        } else {
          return apisBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public Builder setApis(
          int index, proto.Ast.AstNode value) {
        if (apisBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureApisIsMutable();
          apis_.set(index, value);
          onChanged();
        } else {
          apisBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public Builder setApis(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (apisBuilder_ == null) {
          ensureApisIsMutable();
          apis_.set(index, builderForValue.build());
          onChanged();
        } else {
          apisBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public Builder addApis(proto.Ast.AstNode value) {
        if (apisBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureApisIsMutable();
          apis_.add(value);
          onChanged();
        } else {
          apisBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public Builder addApis(
          int index, proto.Ast.AstNode value) {
        if (apisBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureApisIsMutable();
          apis_.add(index, value);
          onChanged();
        } else {
          apisBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public Builder addApis(
          proto.Ast.AstNode.Builder builderForValue) {
        if (apisBuilder_ == null) {
          ensureApisIsMutable();
          apis_.add(builderForValue.build());
          onChanged();
        } else {
          apisBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public Builder addApis(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (apisBuilder_ == null) {
          ensureApisIsMutable();
          apis_.add(index, builderForValue.build());
          onChanged();
        } else {
          apisBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public Builder addAllApis(
          java.lang.Iterable<? extends proto.Ast.AstNode> values) {
        if (apisBuilder_ == null) {
          ensureApisIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, apis_);
          onChanged();
        } else {
          apisBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public Builder clearApis() {
        if (apisBuilder_ == null) {
          apis_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          apisBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public Builder removeApis(int index) {
        if (apisBuilder_ == null) {
          ensureApisIsMutable();
          apis_.remove(index);
          onChanged();
        } else {
          apisBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public proto.Ast.AstNode.Builder getApisBuilder(
          int index) {
        return getApisFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public proto.Ast.AstNodeOrBuilder getApisOrBuilder(
          int index) {
        if (apisBuilder_ == null) {
          return apis_.get(index);  } else {
          return apisBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
           getApisOrBuilderList() {
        if (apisBuilder_ != null) {
          return apisBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(apis_);
        }
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public proto.Ast.AstNode.Builder addApisBuilder() {
        return getApisFieldBuilder().addBuilder(
            proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public proto.Ast.AstNode.Builder addApisBuilder(
          int index) {
        return getApisFieldBuilder().addBuilder(
            index, proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <pre>
       * List the APIs as a list of pre-defined ast nodes
       * </pre>
       *
       * <code>repeated .proto.AstNode apis = 1;</code>
       */
      public java.util.List<proto.Ast.AstNode.Builder> 
           getApisBuilderList() {
        return getApisFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getApisFieldBuilder() {
        if (apisBuilder_ == null) {
          apisBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  apis_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          apis_ = null;
        }
        return apisBuilder_;
      }

      private boolean saveFeature_ ;
      /**
       * <pre>
       * Save generic feature result
       * </pre>
       *
       * <code>bool save_feature = 2;</code>
       */
      public boolean getSaveFeature() {
        return saveFeature_;
      }
      /**
       * <pre>
       * Save generic feature result
       * </pre>
       *
       * <code>bool save_feature = 2;</code>
       */
      public Builder setSaveFeature(boolean value) {
        
        saveFeature_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Save generic feature result
       * </pre>
       *
       * <code>bool save_feature = 2;</code>
       */
      public Builder clearSaveFeature() {
        
        saveFeature_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object smtFormula_ = "";
      /**
       * <pre>
       * SMT formula of node ids, interpretable by Z3, allow flexible constraints on the ast nodes
       * https://rise4fun.com/z3/tutorialcontent/sequences
       * </pre>
       *
       * <code>string smt_formula = 3;</code>
       */
      public java.lang.String getSmtFormula() {
        java.lang.Object ref = smtFormula_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          smtFormula_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * SMT formula of node ids, interpretable by Z3, allow flexible constraints on the ast nodes
       * https://rise4fun.com/z3/tutorialcontent/sequences
       * </pre>
       *
       * <code>string smt_formula = 3;</code>
       */
      public com.google.protobuf.ByteString
          getSmtFormulaBytes() {
        java.lang.Object ref = smtFormula_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          smtFormula_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * SMT formula of node ids, interpretable by Z3, allow flexible constraints on the ast nodes
       * https://rise4fun.com/z3/tutorialcontent/sequences
       * </pre>
       *
       * <code>string smt_formula = 3;</code>
       */
      public Builder setSmtFormula(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        smtFormula_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * SMT formula of node ids, interpretable by Z3, allow flexible constraints on the ast nodes
       * https://rise4fun.com/z3/tutorialcontent/sequences
       * </pre>
       *
       * <code>string smt_formula = 3;</code>
       */
      public Builder clearSmtFormula() {
        
        smtFormula_ = getDefaultInstance().getSmtFormula();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * SMT formula of node ids, interpretable by Z3, allow flexible constraints on the ast nodes
       * https://rise4fun.com/z3/tutorialcontent/sequences
       * </pre>
       *
       * <code>string smt_formula = 3;</code>
       */
      public Builder setSmtFormulaBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        smtFormula_ = value;
        onChanged();
        return this;
      }

      private boolean smtSatisfied_ ;
      /**
       * <pre>
       * The satisfiability evaluation result, filled after evaluation. True means we will investigate further on this package.
       * </pre>
       *
       * <code>bool smt_satisfied = 4;</code>
       */
      public boolean getSmtSatisfied() {
        return smtSatisfied_;
      }
      /**
       * <pre>
       * The satisfiability evaluation result, filled after evaluation. True means we will investigate further on this package.
       * </pre>
       *
       * <code>bool smt_satisfied = 4;</code>
       */
      public Builder setSmtSatisfied(boolean value) {
        
        smtSatisfied_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The satisfiability evaluation result, filled after evaluation. True means we will investigate further on this package.
       * </pre>
       *
       * <code>bool smt_satisfied = 4;</code>
       */
      public Builder clearSmtSatisfied() {
        
        smtSatisfied_ = false;
        onChanged();
        return this;
      }

      private boolean funcOnly_ ;
      /**
       * <pre>
       * Allow any base_type and match only function name. This is a temporary to dynamic types in scripting languages.
       * </pre>
       *
       * <code>bool func_only = 5;</code>
       */
      public boolean getFuncOnly() {
        return funcOnly_;
      }
      /**
       * <pre>
       * Allow any base_type and match only function name. This is a temporary to dynamic types in scripting languages.
       * </pre>
       *
       * <code>bool func_only = 5;</code>
       */
      public Builder setFuncOnly(boolean value) {
        
        funcOnly_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Allow any base_type and match only function name. This is a temporary to dynamic types in scripting languages.
       * </pre>
       *
       * <code>bool func_only = 5;</code>
       */
      public Builder clearFuncOnly() {
        
        funcOnly_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:proto.AstLookupConfig)
    }

    // @@protoc_insertion_point(class_scope:proto.AstLookupConfig)
    private static final proto.Ast.AstLookupConfig DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Ast.AstLookupConfig();
    }

    public static proto.Ast.AstLookupConfig getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AstLookupConfig>
        PARSER = new com.google.protobuf.AbstractParser<AstLookupConfig>() {
      @java.lang.Override
      public AstLookupConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AstLookupConfig(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<AstLookupConfig> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AstLookupConfig> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public proto.Ast.AstLookupConfig getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PkgAstResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.PkgAstResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Package information
     * </pre>
     *
     * <code>string pkg_name = 1;</code>
     */
    java.lang.String getPkgName();
    /**
     * <pre>
     * Package information
     * </pre>
     *
     * <code>string pkg_name = 1;</code>
     */
    com.google.protobuf.ByteString
        getPkgNameBytes();

    /**
     * <code>string pkg_version = 2;</code>
     */
    java.lang.String getPkgVersion();
    /**
     * <code>string pkg_version = 2;</code>
     */
    com.google.protobuf.ByteString
        getPkgVersionBytes();

    /**
     * <code>.proto.Language language = 3;</code>
     */
    int getLanguageValue();
    /**
     * <code>.proto.Language language = 3;</code>
     */
    proto.Ast.Language getLanguage();

    /**
     * <code>string input_path = 4;</code>
     */
    java.lang.String getInputPath();
    /**
     * <code>string input_path = 4;</code>
     */
    com.google.protobuf.ByteString
        getInputPathBytes();

    /**
     * <code>.proto.AstLookupConfig config = 5;</code>
     */
    boolean hasConfig();
    /**
     * <code>.proto.AstLookupConfig config = 5;</code>
     */
    proto.Ast.AstLookupConfig getConfig();
    /**
     * <code>.proto.AstLookupConfig config = 5;</code>
     */
    proto.Ast.AstLookupConfigOrBuilder getConfigOrBuilder();

    /**
     * <pre>
     * Ast lookup results
     * </pre>
     *
     * <code>repeated .proto.AstNode api_results = 6;</code>
     */
    java.util.List<proto.Ast.AstNode> 
        getApiResultsList();
    /**
     * <pre>
     * Ast lookup results
     * </pre>
     *
     * <code>repeated .proto.AstNode api_results = 6;</code>
     */
    proto.Ast.AstNode getApiResults(int index);
    /**
     * <pre>
     * Ast lookup results
     * </pre>
     *
     * <code>repeated .proto.AstNode api_results = 6;</code>
     */
    int getApiResultsCount();
    /**
     * <pre>
     * Ast lookup results
     * </pre>
     *
     * <code>repeated .proto.AstNode api_results = 6;</code>
     */
    java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getApiResultsOrBuilderList();
    /**
     * <pre>
     * Ast lookup results
     * </pre>
     *
     * <code>repeated .proto.AstNode api_results = 6;</code>
     */
    proto.Ast.AstNodeOrBuilder getApiResultsOrBuilder(
        int index);

    /**
     * <pre>
     * Abstract syntax tree for files
     * </pre>
     *
     * <code>repeated .proto.AstNode root_nodes = 7;</code>
     */
    java.util.List<proto.Ast.AstNode> 
        getRootNodesList();
    /**
     * <pre>
     * Abstract syntax tree for files
     * </pre>
     *
     * <code>repeated .proto.AstNode root_nodes = 7;</code>
     */
    proto.Ast.AstNode getRootNodes(int index);
    /**
     * <pre>
     * Abstract syntax tree for files
     * </pre>
     *
     * <code>repeated .proto.AstNode root_nodes = 7;</code>
     */
    int getRootNodesCount();
    /**
     * <pre>
     * Abstract syntax tree for files
     * </pre>
     *
     * <code>repeated .proto.AstNode root_nodes = 7;</code>
     */
    java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getRootNodesOrBuilderList();
    /**
     * <pre>
     * Abstract syntax tree for files
     * </pre>
     *
     * <code>repeated .proto.AstNode root_nodes = 7;</code>
     */
    proto.Ast.AstNodeOrBuilder getRootNodesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code proto.PkgAstResult}
   */
  public  static final class PkgAstResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.PkgAstResult)
      PkgAstResultOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PkgAstResult.newBuilder() to construct.
    private PkgAstResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PkgAstResult() {
      pkgName_ = "";
      pkgVersion_ = "";
      language_ = 0;
      inputPath_ = "";
      apiResults_ = java.util.Collections.emptyList();
      rootNodes_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private PkgAstResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              pkgName_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              pkgVersion_ = s;
              break;
            }
            case 24: {
              int rawValue = input.readEnum();

              language_ = rawValue;
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              inputPath_ = s;
              break;
            }
            case 42: {
              proto.Ast.AstLookupConfig.Builder subBuilder = null;
              if (config_ != null) {
                subBuilder = config_.toBuilder();
              }
              config_ = input.readMessage(proto.Ast.AstLookupConfig.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(config_);
                config_ = subBuilder.buildPartial();
              }

              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                apiResults_ = new java.util.ArrayList<proto.Ast.AstNode>();
                mutable_bitField0_ |= 0x00000020;
              }
              apiResults_.add(
                  input.readMessage(proto.Ast.AstNode.parser(), extensionRegistry));
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                rootNodes_ = new java.util.ArrayList<proto.Ast.AstNode>();
                mutable_bitField0_ |= 0x00000040;
              }
              rootNodes_.add(
                  input.readMessage(proto.Ast.AstNode.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          apiResults_ = java.util.Collections.unmodifiableList(apiResults_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          rootNodes_ = java.util.Collections.unmodifiableList(rootNodes_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Ast.internal_static_proto_PkgAstResult_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Ast.internal_static_proto_PkgAstResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Ast.PkgAstResult.class, proto.Ast.PkgAstResult.Builder.class);
    }

    private int bitField0_;
    public static final int PKG_NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object pkgName_;
    /**
     * <pre>
     * Package information
     * </pre>
     *
     * <code>string pkg_name = 1;</code>
     */
    public java.lang.String getPkgName() {
      java.lang.Object ref = pkgName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        pkgName_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Package information
     * </pre>
     *
     * <code>string pkg_name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getPkgNameBytes() {
      java.lang.Object ref = pkgName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        pkgName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PKG_VERSION_FIELD_NUMBER = 2;
    private volatile java.lang.Object pkgVersion_;
    /**
     * <code>string pkg_version = 2;</code>
     */
    public java.lang.String getPkgVersion() {
      java.lang.Object ref = pkgVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        pkgVersion_ = s;
        return s;
      }
    }
    /**
     * <code>string pkg_version = 2;</code>
     */
    public com.google.protobuf.ByteString
        getPkgVersionBytes() {
      java.lang.Object ref = pkgVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        pkgVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LANGUAGE_FIELD_NUMBER = 3;
    private int language_;
    /**
     * <code>.proto.Language language = 3;</code>
     */
    public int getLanguageValue() {
      return language_;
    }
    /**
     * <code>.proto.Language language = 3;</code>
     */
    public proto.Ast.Language getLanguage() {
      @SuppressWarnings("deprecation")
      proto.Ast.Language result = proto.Ast.Language.valueOf(language_);
      return result == null ? proto.Ast.Language.UNRECOGNIZED : result;
    }

    public static final int INPUT_PATH_FIELD_NUMBER = 4;
    private volatile java.lang.Object inputPath_;
    /**
     * <code>string input_path = 4;</code>
     */
    public java.lang.String getInputPath() {
      java.lang.Object ref = inputPath_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        inputPath_ = s;
        return s;
      }
    }
    /**
     * <code>string input_path = 4;</code>
     */
    public com.google.protobuf.ByteString
        getInputPathBytes() {
      java.lang.Object ref = inputPath_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        inputPath_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CONFIG_FIELD_NUMBER = 5;
    private proto.Ast.AstLookupConfig config_;
    /**
     * <code>.proto.AstLookupConfig config = 5;</code>
     */
    public boolean hasConfig() {
      return config_ != null;
    }
    /**
     * <code>.proto.AstLookupConfig config = 5;</code>
     */
    public proto.Ast.AstLookupConfig getConfig() {
      return config_ == null ? proto.Ast.AstLookupConfig.getDefaultInstance() : config_;
    }
    /**
     * <code>.proto.AstLookupConfig config = 5;</code>
     */
    public proto.Ast.AstLookupConfigOrBuilder getConfigOrBuilder() {
      return getConfig();
    }

    public static final int API_RESULTS_FIELD_NUMBER = 6;
    private java.util.List<proto.Ast.AstNode> apiResults_;
    /**
     * <pre>
     * Ast lookup results
     * </pre>
     *
     * <code>repeated .proto.AstNode api_results = 6;</code>
     */
    public java.util.List<proto.Ast.AstNode> getApiResultsList() {
      return apiResults_;
    }
    /**
     * <pre>
     * Ast lookup results
     * </pre>
     *
     * <code>repeated .proto.AstNode api_results = 6;</code>
     */
    public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getApiResultsOrBuilderList() {
      return apiResults_;
    }
    /**
     * <pre>
     * Ast lookup results
     * </pre>
     *
     * <code>repeated .proto.AstNode api_results = 6;</code>
     */
    public int getApiResultsCount() {
      return apiResults_.size();
    }
    /**
     * <pre>
     * Ast lookup results
     * </pre>
     *
     * <code>repeated .proto.AstNode api_results = 6;</code>
     */
    public proto.Ast.AstNode getApiResults(int index) {
      return apiResults_.get(index);
    }
    /**
     * <pre>
     * Ast lookup results
     * </pre>
     *
     * <code>repeated .proto.AstNode api_results = 6;</code>
     */
    public proto.Ast.AstNodeOrBuilder getApiResultsOrBuilder(
        int index) {
      return apiResults_.get(index);
    }

    public static final int ROOT_NODES_FIELD_NUMBER = 7;
    private java.util.List<proto.Ast.AstNode> rootNodes_;
    /**
     * <pre>
     * Abstract syntax tree for files
     * </pre>
     *
     * <code>repeated .proto.AstNode root_nodes = 7;</code>
     */
    public java.util.List<proto.Ast.AstNode> getRootNodesList() {
      return rootNodes_;
    }
    /**
     * <pre>
     * Abstract syntax tree for files
     * </pre>
     *
     * <code>repeated .proto.AstNode root_nodes = 7;</code>
     */
    public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getRootNodesOrBuilderList() {
      return rootNodes_;
    }
    /**
     * <pre>
     * Abstract syntax tree for files
     * </pre>
     *
     * <code>repeated .proto.AstNode root_nodes = 7;</code>
     */
    public int getRootNodesCount() {
      return rootNodes_.size();
    }
    /**
     * <pre>
     * Abstract syntax tree for files
     * </pre>
     *
     * <code>repeated .proto.AstNode root_nodes = 7;</code>
     */
    public proto.Ast.AstNode getRootNodes(int index) {
      return rootNodes_.get(index);
    }
    /**
     * <pre>
     * Abstract syntax tree for files
     * </pre>
     *
     * <code>repeated .proto.AstNode root_nodes = 7;</code>
     */
    public proto.Ast.AstNodeOrBuilder getRootNodesOrBuilder(
        int index) {
      return rootNodes_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getPkgNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, pkgName_);
      }
      if (!getPkgVersionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, pkgVersion_);
      }
      if (language_ != proto.Ast.Language.UNKNOWN.getNumber()) {
        output.writeEnum(3, language_);
      }
      if (!getInputPathBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, inputPath_);
      }
      if (config_ != null) {
        output.writeMessage(5, getConfig());
      }
      for (int i = 0; i < apiResults_.size(); i++) {
        output.writeMessage(6, apiResults_.get(i));
      }
      for (int i = 0; i < rootNodes_.size(); i++) {
        output.writeMessage(7, rootNodes_.get(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getPkgNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, pkgName_);
      }
      if (!getPkgVersionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, pkgVersion_);
      }
      if (language_ != proto.Ast.Language.UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, language_);
      }
      if (!getInputPathBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, inputPath_);
      }
      if (config_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getConfig());
      }
      for (int i = 0; i < apiResults_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, apiResults_.get(i));
      }
      for (int i = 0; i < rootNodes_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, rootNodes_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof proto.Ast.PkgAstResult)) {
        return super.equals(obj);
      }
      proto.Ast.PkgAstResult other = (proto.Ast.PkgAstResult) obj;

      boolean result = true;
      result = result && getPkgName()
          .equals(other.getPkgName());
      result = result && getPkgVersion()
          .equals(other.getPkgVersion());
      result = result && language_ == other.language_;
      result = result && getInputPath()
          .equals(other.getInputPath());
      result = result && (hasConfig() == other.hasConfig());
      if (hasConfig()) {
        result = result && getConfig()
            .equals(other.getConfig());
      }
      result = result && getApiResultsList()
          .equals(other.getApiResultsList());
      result = result && getRootNodesList()
          .equals(other.getRootNodesList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + PKG_NAME_FIELD_NUMBER;
      hash = (53 * hash) + getPkgName().hashCode();
      hash = (37 * hash) + PKG_VERSION_FIELD_NUMBER;
      hash = (53 * hash) + getPkgVersion().hashCode();
      hash = (37 * hash) + LANGUAGE_FIELD_NUMBER;
      hash = (53 * hash) + language_;
      hash = (37 * hash) + INPUT_PATH_FIELD_NUMBER;
      hash = (53 * hash) + getInputPath().hashCode();
      if (hasConfig()) {
        hash = (37 * hash) + CONFIG_FIELD_NUMBER;
        hash = (53 * hash) + getConfig().hashCode();
      }
      if (getApiResultsCount() > 0) {
        hash = (37 * hash) + API_RESULTS_FIELD_NUMBER;
        hash = (53 * hash) + getApiResultsList().hashCode();
      }
      if (getRootNodesCount() > 0) {
        hash = (37 * hash) + ROOT_NODES_FIELD_NUMBER;
        hash = (53 * hash) + getRootNodesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.Ast.PkgAstResult parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.PkgAstResult parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.PkgAstResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.PkgAstResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.PkgAstResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.PkgAstResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.PkgAstResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.PkgAstResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.PkgAstResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.Ast.PkgAstResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.PkgAstResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.PkgAstResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(proto.Ast.PkgAstResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code proto.PkgAstResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.PkgAstResult)
        proto.Ast.PkgAstResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Ast.internal_static_proto_PkgAstResult_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Ast.internal_static_proto_PkgAstResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Ast.PkgAstResult.class, proto.Ast.PkgAstResult.Builder.class);
      }

      // Construct using proto.Ast.PkgAstResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getApiResultsFieldBuilder();
          getRootNodesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        pkgName_ = "";

        pkgVersion_ = "";

        language_ = 0;

        inputPath_ = "";

        if (configBuilder_ == null) {
          config_ = null;
        } else {
          config_ = null;
          configBuilder_ = null;
        }
        if (apiResultsBuilder_ == null) {
          apiResults_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          apiResultsBuilder_.clear();
        }
        if (rootNodesBuilder_ == null) {
          rootNodes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          rootNodesBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Ast.internal_static_proto_PkgAstResult_descriptor;
      }

      @java.lang.Override
      public proto.Ast.PkgAstResult getDefaultInstanceForType() {
        return proto.Ast.PkgAstResult.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Ast.PkgAstResult build() {
        proto.Ast.PkgAstResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Ast.PkgAstResult buildPartial() {
        proto.Ast.PkgAstResult result = new proto.Ast.PkgAstResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.pkgName_ = pkgName_;
        result.pkgVersion_ = pkgVersion_;
        result.language_ = language_;
        result.inputPath_ = inputPath_;
        if (configBuilder_ == null) {
          result.config_ = config_;
        } else {
          result.config_ = configBuilder_.build();
        }
        if (apiResultsBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            apiResults_ = java.util.Collections.unmodifiableList(apiResults_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.apiResults_ = apiResults_;
        } else {
          result.apiResults_ = apiResultsBuilder_.build();
        }
        if (rootNodesBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            rootNodes_ = java.util.Collections.unmodifiableList(rootNodes_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.rootNodes_ = rootNodes_;
        } else {
          result.rootNodes_ = rootNodesBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof proto.Ast.PkgAstResult) {
          return mergeFrom((proto.Ast.PkgAstResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Ast.PkgAstResult other) {
        if (other == proto.Ast.PkgAstResult.getDefaultInstance()) return this;
        if (!other.getPkgName().isEmpty()) {
          pkgName_ = other.pkgName_;
          onChanged();
        }
        if (!other.getPkgVersion().isEmpty()) {
          pkgVersion_ = other.pkgVersion_;
          onChanged();
        }
        if (other.language_ != 0) {
          setLanguageValue(other.getLanguageValue());
        }
        if (!other.getInputPath().isEmpty()) {
          inputPath_ = other.inputPath_;
          onChanged();
        }
        if (other.hasConfig()) {
          mergeConfig(other.getConfig());
        }
        if (apiResultsBuilder_ == null) {
          if (!other.apiResults_.isEmpty()) {
            if (apiResults_.isEmpty()) {
              apiResults_ = other.apiResults_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureApiResultsIsMutable();
              apiResults_.addAll(other.apiResults_);
            }
            onChanged();
          }
        } else {
          if (!other.apiResults_.isEmpty()) {
            if (apiResultsBuilder_.isEmpty()) {
              apiResultsBuilder_.dispose();
              apiResultsBuilder_ = null;
              apiResults_ = other.apiResults_;
              bitField0_ = (bitField0_ & ~0x00000020);
              apiResultsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getApiResultsFieldBuilder() : null;
            } else {
              apiResultsBuilder_.addAllMessages(other.apiResults_);
            }
          }
        }
        if (rootNodesBuilder_ == null) {
          if (!other.rootNodes_.isEmpty()) {
            if (rootNodes_.isEmpty()) {
              rootNodes_ = other.rootNodes_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureRootNodesIsMutable();
              rootNodes_.addAll(other.rootNodes_);
            }
            onChanged();
          }
        } else {
          if (!other.rootNodes_.isEmpty()) {
            if (rootNodesBuilder_.isEmpty()) {
              rootNodesBuilder_.dispose();
              rootNodesBuilder_ = null;
              rootNodes_ = other.rootNodes_;
              bitField0_ = (bitField0_ & ~0x00000040);
              rootNodesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getRootNodesFieldBuilder() : null;
            } else {
              rootNodesBuilder_.addAllMessages(other.rootNodes_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        proto.Ast.PkgAstResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Ast.PkgAstResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object pkgName_ = "";
      /**
       * <pre>
       * Package information
       * </pre>
       *
       * <code>string pkg_name = 1;</code>
       */
      public java.lang.String getPkgName() {
        java.lang.Object ref = pkgName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          pkgName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Package information
       * </pre>
       *
       * <code>string pkg_name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getPkgNameBytes() {
        java.lang.Object ref = pkgName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          pkgName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Package information
       * </pre>
       *
       * <code>string pkg_name = 1;</code>
       */
      public Builder setPkgName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        pkgName_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Package information
       * </pre>
       *
       * <code>string pkg_name = 1;</code>
       */
      public Builder clearPkgName() {
        
        pkgName_ = getDefaultInstance().getPkgName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Package information
       * </pre>
       *
       * <code>string pkg_name = 1;</code>
       */
      public Builder setPkgNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        pkgName_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object pkgVersion_ = "";
      /**
       * <code>string pkg_version = 2;</code>
       */
      public java.lang.String getPkgVersion() {
        java.lang.Object ref = pkgVersion_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          pkgVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string pkg_version = 2;</code>
       */
      public com.google.protobuf.ByteString
          getPkgVersionBytes() {
        java.lang.Object ref = pkgVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          pkgVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string pkg_version = 2;</code>
       */
      public Builder setPkgVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        pkgVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string pkg_version = 2;</code>
       */
      public Builder clearPkgVersion() {
        
        pkgVersion_ = getDefaultInstance().getPkgVersion();
        onChanged();
        return this;
      }
      /**
       * <code>string pkg_version = 2;</code>
       */
      public Builder setPkgVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        pkgVersion_ = value;
        onChanged();
        return this;
      }

      private int language_ = 0;
      /**
       * <code>.proto.Language language = 3;</code>
       */
      public int getLanguageValue() {
        return language_;
      }
      /**
       * <code>.proto.Language language = 3;</code>
       */
      public Builder setLanguageValue(int value) {
        language_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.proto.Language language = 3;</code>
       */
      public proto.Ast.Language getLanguage() {
        @SuppressWarnings("deprecation")
        proto.Ast.Language result = proto.Ast.Language.valueOf(language_);
        return result == null ? proto.Ast.Language.UNRECOGNIZED : result;
      }
      /**
       * <code>.proto.Language language = 3;</code>
       */
      public Builder setLanguage(proto.Ast.Language value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        language_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.proto.Language language = 3;</code>
       */
      public Builder clearLanguage() {
        
        language_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object inputPath_ = "";
      /**
       * <code>string input_path = 4;</code>
       */
      public java.lang.String getInputPath() {
        java.lang.Object ref = inputPath_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          inputPath_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string input_path = 4;</code>
       */
      public com.google.protobuf.ByteString
          getInputPathBytes() {
        java.lang.Object ref = inputPath_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          inputPath_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string input_path = 4;</code>
       */
      public Builder setInputPath(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        inputPath_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string input_path = 4;</code>
       */
      public Builder clearInputPath() {
        
        inputPath_ = getDefaultInstance().getInputPath();
        onChanged();
        return this;
      }
      /**
       * <code>string input_path = 4;</code>
       */
      public Builder setInputPathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        inputPath_ = value;
        onChanged();
        return this;
      }

      private proto.Ast.AstLookupConfig config_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstLookupConfig, proto.Ast.AstLookupConfig.Builder, proto.Ast.AstLookupConfigOrBuilder> configBuilder_;
      /**
       * <code>.proto.AstLookupConfig config = 5;</code>
       */
      public boolean hasConfig() {
        return configBuilder_ != null || config_ != null;
      }
      /**
       * <code>.proto.AstLookupConfig config = 5;</code>
       */
      public proto.Ast.AstLookupConfig getConfig() {
        if (configBuilder_ == null) {
          return config_ == null ? proto.Ast.AstLookupConfig.getDefaultInstance() : config_;
        } else {
          return configBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.AstLookupConfig config = 5;</code>
       */
      public Builder setConfig(proto.Ast.AstLookupConfig value) {
        if (configBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          config_ = value;
          onChanged();
        } else {
          configBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstLookupConfig config = 5;</code>
       */
      public Builder setConfig(
          proto.Ast.AstLookupConfig.Builder builderForValue) {
        if (configBuilder_ == null) {
          config_ = builderForValue.build();
          onChanged();
        } else {
          configBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.AstLookupConfig config = 5;</code>
       */
      public Builder mergeConfig(proto.Ast.AstLookupConfig value) {
        if (configBuilder_ == null) {
          if (config_ != null) {
            config_ =
              proto.Ast.AstLookupConfig.newBuilder(config_).mergeFrom(value).buildPartial();
          } else {
            config_ = value;
          }
          onChanged();
        } else {
          configBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstLookupConfig config = 5;</code>
       */
      public Builder clearConfig() {
        if (configBuilder_ == null) {
          config_ = null;
          onChanged();
        } else {
          config_ = null;
          configBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.AstLookupConfig config = 5;</code>
       */
      public proto.Ast.AstLookupConfig.Builder getConfigBuilder() {
        
        onChanged();
        return getConfigFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.AstLookupConfig config = 5;</code>
       */
      public proto.Ast.AstLookupConfigOrBuilder getConfigOrBuilder() {
        if (configBuilder_ != null) {
          return configBuilder_.getMessageOrBuilder();
        } else {
          return config_ == null ?
              proto.Ast.AstLookupConfig.getDefaultInstance() : config_;
        }
      }
      /**
       * <code>.proto.AstLookupConfig config = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstLookupConfig, proto.Ast.AstLookupConfig.Builder, proto.Ast.AstLookupConfigOrBuilder> 
          getConfigFieldBuilder() {
        if (configBuilder_ == null) {
          configBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Ast.AstLookupConfig, proto.Ast.AstLookupConfig.Builder, proto.Ast.AstLookupConfigOrBuilder>(
                  getConfig(),
                  getParentForChildren(),
                  isClean());
          config_ = null;
        }
        return configBuilder_;
      }

      private java.util.List<proto.Ast.AstNode> apiResults_ =
        java.util.Collections.emptyList();
      private void ensureApiResultsIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          apiResults_ = new java.util.ArrayList<proto.Ast.AstNode>(apiResults_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> apiResultsBuilder_;

      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public java.util.List<proto.Ast.AstNode> getApiResultsList() {
        if (apiResultsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(apiResults_);
        } else {
          return apiResultsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public int getApiResultsCount() {
        if (apiResultsBuilder_ == null) {
          return apiResults_.size();
        } else {
          return apiResultsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public proto.Ast.AstNode getApiResults(int index) {
        if (apiResultsBuilder_ == null) {
          return apiResults_.get(index);
        } else {
          return apiResultsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public Builder setApiResults(
          int index, proto.Ast.AstNode value) {
        if (apiResultsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureApiResultsIsMutable();
          apiResults_.set(index, value);
          onChanged();
        } else {
          apiResultsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public Builder setApiResults(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (apiResultsBuilder_ == null) {
          ensureApiResultsIsMutable();
          apiResults_.set(index, builderForValue.build());
          onChanged();
        } else {
          apiResultsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public Builder addApiResults(proto.Ast.AstNode value) {
        if (apiResultsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureApiResultsIsMutable();
          apiResults_.add(value);
          onChanged();
        } else {
          apiResultsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public Builder addApiResults(
          int index, proto.Ast.AstNode value) {
        if (apiResultsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureApiResultsIsMutable();
          apiResults_.add(index, value);
          onChanged();
        } else {
          apiResultsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public Builder addApiResults(
          proto.Ast.AstNode.Builder builderForValue) {
        if (apiResultsBuilder_ == null) {
          ensureApiResultsIsMutable();
          apiResults_.add(builderForValue.build());
          onChanged();
        } else {
          apiResultsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public Builder addApiResults(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (apiResultsBuilder_ == null) {
          ensureApiResultsIsMutable();
          apiResults_.add(index, builderForValue.build());
          onChanged();
        } else {
          apiResultsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public Builder addAllApiResults(
          java.lang.Iterable<? extends proto.Ast.AstNode> values) {
        if (apiResultsBuilder_ == null) {
          ensureApiResultsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, apiResults_);
          onChanged();
        } else {
          apiResultsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public Builder clearApiResults() {
        if (apiResultsBuilder_ == null) {
          apiResults_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          apiResultsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public Builder removeApiResults(int index) {
        if (apiResultsBuilder_ == null) {
          ensureApiResultsIsMutable();
          apiResults_.remove(index);
          onChanged();
        } else {
          apiResultsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public proto.Ast.AstNode.Builder getApiResultsBuilder(
          int index) {
        return getApiResultsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public proto.Ast.AstNodeOrBuilder getApiResultsOrBuilder(
          int index) {
        if (apiResultsBuilder_ == null) {
          return apiResults_.get(index);  } else {
          return apiResultsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
           getApiResultsOrBuilderList() {
        if (apiResultsBuilder_ != null) {
          return apiResultsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(apiResults_);
        }
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public proto.Ast.AstNode.Builder addApiResultsBuilder() {
        return getApiResultsFieldBuilder().addBuilder(
            proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public proto.Ast.AstNode.Builder addApiResultsBuilder(
          int index) {
        return getApiResultsFieldBuilder().addBuilder(
            index, proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <pre>
       * Ast lookup results
       * </pre>
       *
       * <code>repeated .proto.AstNode api_results = 6;</code>
       */
      public java.util.List<proto.Ast.AstNode.Builder> 
           getApiResultsBuilderList() {
        return getApiResultsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getApiResultsFieldBuilder() {
        if (apiResultsBuilder_ == null) {
          apiResultsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  apiResults_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          apiResults_ = null;
        }
        return apiResultsBuilder_;
      }

      private java.util.List<proto.Ast.AstNode> rootNodes_ =
        java.util.Collections.emptyList();
      private void ensureRootNodesIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          rootNodes_ = new java.util.ArrayList<proto.Ast.AstNode>(rootNodes_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> rootNodesBuilder_;

      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public java.util.List<proto.Ast.AstNode> getRootNodesList() {
        if (rootNodesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(rootNodes_);
        } else {
          return rootNodesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public int getRootNodesCount() {
        if (rootNodesBuilder_ == null) {
          return rootNodes_.size();
        } else {
          return rootNodesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public proto.Ast.AstNode getRootNodes(int index) {
        if (rootNodesBuilder_ == null) {
          return rootNodes_.get(index);
        } else {
          return rootNodesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public Builder setRootNodes(
          int index, proto.Ast.AstNode value) {
        if (rootNodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRootNodesIsMutable();
          rootNodes_.set(index, value);
          onChanged();
        } else {
          rootNodesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public Builder setRootNodes(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (rootNodesBuilder_ == null) {
          ensureRootNodesIsMutable();
          rootNodes_.set(index, builderForValue.build());
          onChanged();
        } else {
          rootNodesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public Builder addRootNodes(proto.Ast.AstNode value) {
        if (rootNodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRootNodesIsMutable();
          rootNodes_.add(value);
          onChanged();
        } else {
          rootNodesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public Builder addRootNodes(
          int index, proto.Ast.AstNode value) {
        if (rootNodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRootNodesIsMutable();
          rootNodes_.add(index, value);
          onChanged();
        } else {
          rootNodesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public Builder addRootNodes(
          proto.Ast.AstNode.Builder builderForValue) {
        if (rootNodesBuilder_ == null) {
          ensureRootNodesIsMutable();
          rootNodes_.add(builderForValue.build());
          onChanged();
        } else {
          rootNodesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public Builder addRootNodes(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (rootNodesBuilder_ == null) {
          ensureRootNodesIsMutable();
          rootNodes_.add(index, builderForValue.build());
          onChanged();
        } else {
          rootNodesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public Builder addAllRootNodes(
          java.lang.Iterable<? extends proto.Ast.AstNode> values) {
        if (rootNodesBuilder_ == null) {
          ensureRootNodesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, rootNodes_);
          onChanged();
        } else {
          rootNodesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public Builder clearRootNodes() {
        if (rootNodesBuilder_ == null) {
          rootNodes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          rootNodesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public Builder removeRootNodes(int index) {
        if (rootNodesBuilder_ == null) {
          ensureRootNodesIsMutable();
          rootNodes_.remove(index);
          onChanged();
        } else {
          rootNodesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public proto.Ast.AstNode.Builder getRootNodesBuilder(
          int index) {
        return getRootNodesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public proto.Ast.AstNodeOrBuilder getRootNodesOrBuilder(
          int index) {
        if (rootNodesBuilder_ == null) {
          return rootNodes_.get(index);  } else {
          return rootNodesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
           getRootNodesOrBuilderList() {
        if (rootNodesBuilder_ != null) {
          return rootNodesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(rootNodes_);
        }
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public proto.Ast.AstNode.Builder addRootNodesBuilder() {
        return getRootNodesFieldBuilder().addBuilder(
            proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public proto.Ast.AstNode.Builder addRootNodesBuilder(
          int index) {
        return getRootNodesFieldBuilder().addBuilder(
            index, proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <pre>
       * Abstract syntax tree for files
       * </pre>
       *
       * <code>repeated .proto.AstNode root_nodes = 7;</code>
       */
      public java.util.List<proto.Ast.AstNode.Builder> 
           getRootNodesBuilderList() {
        return getRootNodesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getRootNodesFieldBuilder() {
        if (rootNodesBuilder_ == null) {
          rootNodesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  rootNodes_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          rootNodes_ = null;
        }
        return rootNodesBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:proto.PkgAstResult)
    }

    // @@protoc_insertion_point(class_scope:proto.PkgAstResult)
    private static final proto.Ast.PkgAstResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Ast.PkgAstResult();
    }

    public static proto.Ast.PkgAstResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<PkgAstResult>
        PARSER = new com.google.protobuf.AbstractParser<PkgAstResult>() {
      @java.lang.Override
      public PkgAstResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PkgAstResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<PkgAstResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<PkgAstResult> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public proto.Ast.PkgAstResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PkgAstResultsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.PkgAstResults)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
     */
    java.util.List<proto.Ast.PkgAstResult> 
        getPkgsList();
    /**
     * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
     */
    proto.Ast.PkgAstResult getPkgs(int index);
    /**
     * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
     */
    int getPkgsCount();
    /**
     * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
     */
    java.util.List<? extends proto.Ast.PkgAstResultOrBuilder> 
        getPkgsOrBuilderList();
    /**
     * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
     */
    proto.Ast.PkgAstResultOrBuilder getPkgsOrBuilder(
        int index);

    /**
     * <code>uint64 timestamp = 2;</code>
     */
    long getTimestamp();
  }
  /**
   * Protobuf type {@code proto.PkgAstResults}
   */
  public  static final class PkgAstResults extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.PkgAstResults)
      PkgAstResultsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PkgAstResults.newBuilder() to construct.
    private PkgAstResults(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PkgAstResults() {
      pkgs_ = java.util.Collections.emptyList();
      timestamp_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private PkgAstResults(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                pkgs_ = new java.util.ArrayList<proto.Ast.PkgAstResult>();
                mutable_bitField0_ |= 0x00000001;
              }
              pkgs_.add(
                  input.readMessage(proto.Ast.PkgAstResult.parser(), extensionRegistry));
              break;
            }
            case 16: {

              timestamp_ = input.readUInt64();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          pkgs_ = java.util.Collections.unmodifiableList(pkgs_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Ast.internal_static_proto_PkgAstResults_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Ast.internal_static_proto_PkgAstResults_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Ast.PkgAstResults.class, proto.Ast.PkgAstResults.Builder.class);
    }

    private int bitField0_;
    public static final int PKGS_FIELD_NUMBER = 1;
    private java.util.List<proto.Ast.PkgAstResult> pkgs_;
    /**
     * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
     */
    public java.util.List<proto.Ast.PkgAstResult> getPkgsList() {
      return pkgs_;
    }
    /**
     * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
     */
    public java.util.List<? extends proto.Ast.PkgAstResultOrBuilder> 
        getPkgsOrBuilderList() {
      return pkgs_;
    }
    /**
     * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
     */
    public int getPkgsCount() {
      return pkgs_.size();
    }
    /**
     * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
     */
    public proto.Ast.PkgAstResult getPkgs(int index) {
      return pkgs_.get(index);
    }
    /**
     * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
     */
    public proto.Ast.PkgAstResultOrBuilder getPkgsOrBuilder(
        int index) {
      return pkgs_.get(index);
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 2;
    private long timestamp_;
    /**
     * <code>uint64 timestamp = 2;</code>
     */
    public long getTimestamp() {
      return timestamp_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < pkgs_.size(); i++) {
        output.writeMessage(1, pkgs_.get(i));
      }
      if (timestamp_ != 0L) {
        output.writeUInt64(2, timestamp_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < pkgs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, pkgs_.get(i));
      }
      if (timestamp_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(2, timestamp_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof proto.Ast.PkgAstResults)) {
        return super.equals(obj);
      }
      proto.Ast.PkgAstResults other = (proto.Ast.PkgAstResults) obj;

      boolean result = true;
      result = result && getPkgsList()
          .equals(other.getPkgsList());
      result = result && (getTimestamp()
          == other.getTimestamp());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getPkgsCount() > 0) {
        hash = (37 * hash) + PKGS_FIELD_NUMBER;
        hash = (53 * hash) + getPkgsList().hashCode();
      }
      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTimestamp());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.Ast.PkgAstResults parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.PkgAstResults parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.PkgAstResults parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.PkgAstResults parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.PkgAstResults parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Ast.PkgAstResults parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Ast.PkgAstResults parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.PkgAstResults parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.PkgAstResults parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.Ast.PkgAstResults parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static proto.Ast.PkgAstResults parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Ast.PkgAstResults parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(proto.Ast.PkgAstResults prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code proto.PkgAstResults}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.PkgAstResults)
        proto.Ast.PkgAstResultsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Ast.internal_static_proto_PkgAstResults_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Ast.internal_static_proto_PkgAstResults_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Ast.PkgAstResults.class, proto.Ast.PkgAstResults.Builder.class);
      }

      // Construct using proto.Ast.PkgAstResults.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getPkgsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (pkgsBuilder_ == null) {
          pkgs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          pkgsBuilder_.clear();
        }
        timestamp_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Ast.internal_static_proto_PkgAstResults_descriptor;
      }

      @java.lang.Override
      public proto.Ast.PkgAstResults getDefaultInstanceForType() {
        return proto.Ast.PkgAstResults.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Ast.PkgAstResults build() {
        proto.Ast.PkgAstResults result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Ast.PkgAstResults buildPartial() {
        proto.Ast.PkgAstResults result = new proto.Ast.PkgAstResults(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (pkgsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            pkgs_ = java.util.Collections.unmodifiableList(pkgs_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.pkgs_ = pkgs_;
        } else {
          result.pkgs_ = pkgsBuilder_.build();
        }
        result.timestamp_ = timestamp_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof proto.Ast.PkgAstResults) {
          return mergeFrom((proto.Ast.PkgAstResults)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Ast.PkgAstResults other) {
        if (other == proto.Ast.PkgAstResults.getDefaultInstance()) return this;
        if (pkgsBuilder_ == null) {
          if (!other.pkgs_.isEmpty()) {
            if (pkgs_.isEmpty()) {
              pkgs_ = other.pkgs_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensurePkgsIsMutable();
              pkgs_.addAll(other.pkgs_);
            }
            onChanged();
          }
        } else {
          if (!other.pkgs_.isEmpty()) {
            if (pkgsBuilder_.isEmpty()) {
              pkgsBuilder_.dispose();
              pkgsBuilder_ = null;
              pkgs_ = other.pkgs_;
              bitField0_ = (bitField0_ & ~0x00000001);
              pkgsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getPkgsFieldBuilder() : null;
            } else {
              pkgsBuilder_.addAllMessages(other.pkgs_);
            }
          }
        }
        if (other.getTimestamp() != 0L) {
          setTimestamp(other.getTimestamp());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        proto.Ast.PkgAstResults parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Ast.PkgAstResults) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<proto.Ast.PkgAstResult> pkgs_ =
        java.util.Collections.emptyList();
      private void ensurePkgsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          pkgs_ = new java.util.ArrayList<proto.Ast.PkgAstResult>(pkgs_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.PkgAstResult, proto.Ast.PkgAstResult.Builder, proto.Ast.PkgAstResultOrBuilder> pkgsBuilder_;

      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public java.util.List<proto.Ast.PkgAstResult> getPkgsList() {
        if (pkgsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(pkgs_);
        } else {
          return pkgsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public int getPkgsCount() {
        if (pkgsBuilder_ == null) {
          return pkgs_.size();
        } else {
          return pkgsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public proto.Ast.PkgAstResult getPkgs(int index) {
        if (pkgsBuilder_ == null) {
          return pkgs_.get(index);
        } else {
          return pkgsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public Builder setPkgs(
          int index, proto.Ast.PkgAstResult value) {
        if (pkgsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePkgsIsMutable();
          pkgs_.set(index, value);
          onChanged();
        } else {
          pkgsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public Builder setPkgs(
          int index, proto.Ast.PkgAstResult.Builder builderForValue) {
        if (pkgsBuilder_ == null) {
          ensurePkgsIsMutable();
          pkgs_.set(index, builderForValue.build());
          onChanged();
        } else {
          pkgsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public Builder addPkgs(proto.Ast.PkgAstResult value) {
        if (pkgsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePkgsIsMutable();
          pkgs_.add(value);
          onChanged();
        } else {
          pkgsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public Builder addPkgs(
          int index, proto.Ast.PkgAstResult value) {
        if (pkgsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePkgsIsMutable();
          pkgs_.add(index, value);
          onChanged();
        } else {
          pkgsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public Builder addPkgs(
          proto.Ast.PkgAstResult.Builder builderForValue) {
        if (pkgsBuilder_ == null) {
          ensurePkgsIsMutable();
          pkgs_.add(builderForValue.build());
          onChanged();
        } else {
          pkgsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public Builder addPkgs(
          int index, proto.Ast.PkgAstResult.Builder builderForValue) {
        if (pkgsBuilder_ == null) {
          ensurePkgsIsMutable();
          pkgs_.add(index, builderForValue.build());
          onChanged();
        } else {
          pkgsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public Builder addAllPkgs(
          java.lang.Iterable<? extends proto.Ast.PkgAstResult> values) {
        if (pkgsBuilder_ == null) {
          ensurePkgsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, pkgs_);
          onChanged();
        } else {
          pkgsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public Builder clearPkgs() {
        if (pkgsBuilder_ == null) {
          pkgs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          pkgsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public Builder removePkgs(int index) {
        if (pkgsBuilder_ == null) {
          ensurePkgsIsMutable();
          pkgs_.remove(index);
          onChanged();
        } else {
          pkgsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public proto.Ast.PkgAstResult.Builder getPkgsBuilder(
          int index) {
        return getPkgsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public proto.Ast.PkgAstResultOrBuilder getPkgsOrBuilder(
          int index) {
        if (pkgsBuilder_ == null) {
          return pkgs_.get(index);  } else {
          return pkgsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public java.util.List<? extends proto.Ast.PkgAstResultOrBuilder> 
           getPkgsOrBuilderList() {
        if (pkgsBuilder_ != null) {
          return pkgsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(pkgs_);
        }
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public proto.Ast.PkgAstResult.Builder addPkgsBuilder() {
        return getPkgsFieldBuilder().addBuilder(
            proto.Ast.PkgAstResult.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public proto.Ast.PkgAstResult.Builder addPkgsBuilder(
          int index) {
        return getPkgsFieldBuilder().addBuilder(
            index, proto.Ast.PkgAstResult.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.PkgAstResult pkgs = 1;</code>
       */
      public java.util.List<proto.Ast.PkgAstResult.Builder> 
           getPkgsBuilderList() {
        return getPkgsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.PkgAstResult, proto.Ast.PkgAstResult.Builder, proto.Ast.PkgAstResultOrBuilder> 
          getPkgsFieldBuilder() {
        if (pkgsBuilder_ == null) {
          pkgsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Ast.PkgAstResult, proto.Ast.PkgAstResult.Builder, proto.Ast.PkgAstResultOrBuilder>(
                  pkgs_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          pkgs_ = null;
        }
        return pkgsBuilder_;
      }

      private long timestamp_ ;
      /**
       * <code>uint64 timestamp = 2;</code>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>uint64 timestamp = 2;</code>
       */
      public Builder setTimestamp(long value) {
        
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 timestamp = 2;</code>
       */
      public Builder clearTimestamp() {
        
        timestamp_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:proto.PkgAstResults)
    }

    // @@protoc_insertion_point(class_scope:proto.PkgAstResults)
    private static final proto.Ast.PkgAstResults DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Ast.PkgAstResults();
    }

    public static proto.Ast.PkgAstResults getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<PkgAstResults>
        PARSER = new com.google.protobuf.AbstractParser<PkgAstResults>() {
      @java.lang.Override
      public PkgAstResults parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PkgAstResults(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<PkgAstResults> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<PkgAstResults> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public proto.Ast.PkgAstResults getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_FileInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_FileInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_SourceLocation_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_SourceLocation_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_SourceRange_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_SourceRange_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_AstNode_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_AstNode_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_AstLookupConfig_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_AstLookupConfig_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_PkgAstResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_PkgAstResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_PkgAstResults_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_PkgAstResults_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\tast.proto\022\005proto\"N\n\010FileInfo\022\020\n\010filena" +
      "me\030\001 \001(\t\022\017\n\007relpath\030\002 \001(\t\022\014\n\004file\030\003 \001(\t\022" +
      "\021\n\tdirectory\030\004 \001(\t\"Q\n\016SourceLocation\022\013\n\003" +
      "row\030\001 \001(\005\022\016\n\006column\030\002 \001(\005\022\"\n\tfile_info\030\003" +
      " \001(\0132\017.proto.FileInfo\"W\n\013SourceRange\022$\n\005" +
      "start\030\001 \001(\0132\025.proto.SourceLocation\022\"\n\003en" +
      "d\030\002 \001(\0132\025.proto.SourceLocation\"\355\006\n\007AstNo" +
      "de\022%\n\004type\030\001 \001(\0162\027.proto.AstNode.NodeTyp" +
      "e\022\014\n\004name\030\002 \001(\t\022\021\n\tfull_name\030\003 \001(\t\022\021\n\tba" +
      "se_type\030\004 \001(\t\022\016\n\006module\030\005 \001(\t\022\r\n\005value\030\006" +
      " \001(\t\022\022\n\ndefinition\030\007 \001(\t\022!\n\targ_nodes\030\010 " +
      "\003(\0132\016.proto.AstNode\022\021\n\targuments\030\t \003(\t\022\016" +
      "\n\006source\030\n \001(\t\022!\n\005range\030\013 \001(\0132\022.proto.So" +
      "urceRange\022\n\n\002id\030\014 \001(\005\022+\n\rfunctionality\030\r" +
      " \001(\0162\024.proto.Functionality\022(\n\013source_typ" +
      "e\030\016 \001(\0162\021.proto.SourceTypeH\000\022$\n\tsink_typ" +
      "e\030\017 \001(\0162\017.proto.SinkTypeH\000\022(\n\013danger_typ" +
      "e\030\020 \001(\0162\021.proto.DangerTypeH\000\022.\n\016propagat" +
      "e_type\030\021 \001(\0162\024.proto.PropagateTypeH\000\022#\n\013" +
      "child_nodes\030\022 \003(\0132\016.proto.AstNode\022\026\n\016ins" +
      "tantiatable\030\023 \001(\010\"\260\002\n\010NodeType\022\013\n\007UNKNOW" +
      "N\020\000\022\021\n\rFUNCTION_DECL\020\001\022\021\n\rVARIABLE_DECL\020" +
      "\002\022\016\n\nCLASS_DECL\020\003\022\032\n\026FUNCTION_DECL_REF_E" +
      "XPR\020\013\022\032\n\026VARIABLE_DECL_REF_EXPR\020\014\022\027\n\023CLA" +
      "SS_DECL_REF_EXPR\020\r\022\023\n\017PY_FUNCTION_DEF\020e\022" +
      "\035\n\030JS_ASSIGNMENT_EXPRESSION\020\311\001\022\024\n\017RB_REG" +
      "ULAR_NODE\020\255\002\022\025\n\020RB_VARIABLE_NODE\020\256\002\022\027\n\022J" +
      "AVA_IDENTITY_STMT\020\221\003\022\026\n\021PHP_EXPR_VARIABL" +
      "E\020\365\003B\030\n\026accurate_functionality\"\204\001\n\017AstLo" +
      "okupConfig\022\034\n\004apis\030\001 \003(\0132\016.proto.AstNode" +
      "\022\024\n\014save_feature\030\002 \001(\010\022\023\n\013smt_formula\030\003 " +
      "\001(\t\022\025\n\rsmt_satisfied\030\004 \001(\010\022\021\n\tfunc_only\030" +
      "\005 \001(\010\"\335\001\n\014PkgAstResult\022\020\n\010pkg_name\030\001 \001(\t" +
      "\022\023\n\013pkg_version\030\002 \001(\t\022!\n\010language\030\003 \001(\0162" +
      "\017.proto.Language\022\022\n\ninput_path\030\004 \001(\t\022&\n\006" +
      "config\030\005 \001(\0132\026.proto.AstLookupConfig\022#\n\013" +
      "api_results\030\006 \003(\0132\016.proto.AstNode\022\"\n\nroo" +
      "t_nodes\030\007 \003(\0132\016.proto.AstNode\"E\n\rPkgAstR" +
      "esults\022!\n\004pkgs\030\001 \003(\0132\023.proto.PkgAstResul" +
      "t\022\021\n\ttimestamp\030\002 \001(\004*m\n\010Language\022\013\n\007UNKN" +
      "OWN\020\000\022\n\n\006PYTHON\020\001\022\016\n\nJAVASCRIPT\020\002\022\010\n\004RUB" +
      "Y\020\003\022\010\n\004JAVA\020\004\022\007\n\003PHP\020\005\022\n\n\006CSHARP\020\006\022\007\n\003CP" +
      "P\020\007\022\006\n\002GO\020\010*R\n\rFunctionality\022\020\n\014UNCLASSI" +
      "FIED\020\000\022\n\n\006SOURCE\020\001\022\010\n\004SINK\020\002\022\n\n\006DANGER\020\003" +
      "\022\r\n\tPROPAGATE\020\004*\341\002\n\nSourceType\022\027\n\023SOURCE" +
      "_UNCLASSIFIED\020\000\022\022\n\016SOURCE_ACCOUNT\020\001\022\024\n\020S" +
      "OURCE_BLUETOOTH\020\002\022\022\n\016SOURCE_BROWSER\020\003\022\023\n" +
      "\017SOURCE_CALENDAR\020\004\022\022\n\016SOURCE_CONTACT\020\005\022\023" +
      "\n\017SOURCE_DATABASE\020\006\022\017\n\013SOURCE_FILE\020\007\022\022\n\016" +
      "SOURCE_NETWORK\020\010\022\016\n\nSOURCE_NFC\020\t\022\023\n\017SOUR" +
      "CE_SETTINGS\020\n\022\017\n\013SOURCE_SYNC\020\013\022\034\n\030SOURCE" +
      "_UNIQUE_IDENTIFIER\020\014\022\026\n\022SOURCE_ENVIRONME" +
      "NT\0203\022\025\n\021SOURCE_USER_INPUT\0204\022\026\n\022SOURCE_OB" +
      "FUSCATION\0205*\362\002\n\010SinkType\022\025\n\021SINK_UNCLASS" +
      "IFIED\020\000\022\020\n\014SINK_ACCOUNT\020\001\022\016\n\nSINK_AUDIO\020" +
      "\002\022\020\n\014SINK_BROWSER\020\003\022\021\n\rSINK_CALENDAR\020\004\022\020" +
      "\n\014SINK_CONTACT\020\005\022\r\n\tSINK_FILE\020\006\022\014\n\010SINK_" +
      "LOG\020\007\022\020\n\014SINK_NETWORK\020\010\022\014\n\010SINK_NFC\020\t\022\031\n" +
      "\025SINK_PHONE_CONNECTION\020\n\022\024\n\020SINK_PHONE_S" +
      "TATE\020\013\022\020\n\014SINK_SMS_MMS\020\014\022\r\n\tSINK_SYNC\020\r\022" +
      "\017\n\013SINK_SYSTEM\020\016\022\r\n\tSINK_VOIP\020\017\022\030\n\024SINK_" +
      "CODE_GENERATION\0203\022\032\n\026SINK_PROCESS_OPERAT" +
      "ION\0204\022\021\n\rSINK_DATABASE\0205*,\n\nDangerType\022\036" +
      "\n\032DANGER_UNCLASSIFIED_DANGER\020\000*\203\001\n\rPropa" +
      "gateType\022\032\n\026PROPAGATE_UNCLASSIFIED\020\000\022\024\n\020" +
      "PROPAGATE_ASSIGN\020\001\022\022\n\016PROPAGATE_CALL\020\002\022\025" +
      "\n\021PROPAGATE_SYSCALL\020\003\022\025\n\021PROPAGATE_LIBCA" +
      "LL\020\004b\006proto3"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }
        };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
    internal_static_proto_FileInfo_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_proto_FileInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_FileInfo_descriptor,
        new java.lang.String[] { "Filename", "Relpath", "File", "Directory", });
    internal_static_proto_SourceLocation_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_proto_SourceLocation_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_SourceLocation_descriptor,
        new java.lang.String[] { "Row", "Column", "FileInfo", });
    internal_static_proto_SourceRange_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_proto_SourceRange_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_SourceRange_descriptor,
        new java.lang.String[] { "Start", "End", });
    internal_static_proto_AstNode_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_proto_AstNode_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_AstNode_descriptor,
        new java.lang.String[] { "Type", "Name", "FullName", "BaseType", "Module", "Value", "Definition", "ArgNodes", "Arguments", "Source", "Range", "Id", "Functionality", "SourceType", "SinkType", "DangerType", "PropagateType", "ChildNodes", "Instantiatable", "AccurateFunctionality", });
    internal_static_proto_AstLookupConfig_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_proto_AstLookupConfig_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_AstLookupConfig_descriptor,
        new java.lang.String[] { "Apis", "SaveFeature", "SmtFormula", "SmtSatisfied", "FuncOnly", });
    internal_static_proto_PkgAstResult_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_proto_PkgAstResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_PkgAstResult_descriptor,
        new java.lang.String[] { "PkgName", "PkgVersion", "Language", "InputPath", "Config", "ApiResults", "RootNodes", });
    internal_static_proto_PkgAstResults_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_proto_PkgAstResults_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_PkgAstResults_descriptor,
        new java.lang.String[] { "Pkgs", "Timestamp", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
