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

package proto;

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

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface CentroidOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.Centroid)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>double x = 1;</code>
     */
    double getX();

    /**
     * <code>double y = 2;</code>
     */
    double getY();

    /**
     * <code>double z = 3;</code>
     */
    double getZ();

    /**
     * <code>int32 w = 4;</code>
     */
    int getW();
  }
  /**
   * <pre>
   * Centroid and BasicBlock: http://dl.acm.org/citation.cfm?id=2568286
   * </pre>
   *
   * Protobuf type {@code proto.Centroid}
   */
  public  static final class Centroid extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.Centroid)
      CentroidOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Centroid.newBuilder() to construct.
    private Centroid(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Centroid() {
      x_ = 0D;
      y_ = 0D;
      z_ = 0D;
      w_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Centroid(
        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 9: {

              x_ = input.readDouble();
              break;
            }
            case 17: {

              y_ = input.readDouble();
              break;
            }
            case 25: {

              z_ = input.readDouble();
              break;
            }
            case 32: {

              w_ = input.readInt32();
              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.ClassSig.internal_static_proto_Centroid_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.ClassSig.internal_static_proto_Centroid_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.ClassSig.Centroid.class, proto.ClassSig.Centroid.Builder.class);
    }

    public static final int X_FIELD_NUMBER = 1;
    private double x_;
    /**
     * <code>double x = 1;</code>
     */
    public double getX() {
      return x_;
    }

    public static final int Y_FIELD_NUMBER = 2;
    private double y_;
    /**
     * <code>double y = 2;</code>
     */
    public double getY() {
      return y_;
    }

    public static final int Z_FIELD_NUMBER = 3;
    private double z_;
    /**
     * <code>double z = 3;</code>
     */
    public double getZ() {
      return z_;
    }

    public static final int W_FIELD_NUMBER = 4;
    private int w_;
    /**
     * <code>int32 w = 4;</code>
     */
    public int getW() {
      return w_;
    }

    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 (x_ != 0D) {
        output.writeDouble(1, x_);
      }
      if (y_ != 0D) {
        output.writeDouble(2, y_);
      }
      if (z_ != 0D) {
        output.writeDouble(3, z_);
      }
      if (w_ != 0) {
        output.writeInt32(4, w_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (x_ != 0D) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, x_);
      }
      if (y_ != 0D) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, y_);
      }
      if (z_ != 0D) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, z_);
      }
      if (w_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, w_);
      }
      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.ClassSig.Centroid)) {
        return super.equals(obj);
      }
      proto.ClassSig.Centroid other = (proto.ClassSig.Centroid) obj;

      boolean result = true;
      result = result && (
          java.lang.Double.doubleToLongBits(getX())
          == java.lang.Double.doubleToLongBits(
              other.getX()));
      result = result && (
          java.lang.Double.doubleToLongBits(getY())
          == java.lang.Double.doubleToLongBits(
              other.getY()));
      result = result && (
          java.lang.Double.doubleToLongBits(getZ())
          == java.lang.Double.doubleToLongBits(
              other.getZ()));
      result = result && (getW()
          == other.getW());
      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) + X_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getX()));
      hash = (37 * hash) + Y_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getY()));
      hash = (37 * hash) + Z_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getZ()));
      hash = (37 * hash) + W_FIELD_NUMBER;
      hash = (53 * hash) + getW();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.ClassSig.Centroid parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.Centroid parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.Centroid parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.Centroid parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.Centroid parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.Centroid parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.Centroid parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.Centroid 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.ClassSig.Centroid parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.ClassSig.Centroid 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.ClassSig.Centroid parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.Centroid 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.ClassSig.Centroid 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;
    }
    /**
     * <pre>
     * Centroid and BasicBlock: http://dl.acm.org/citation.cfm?id=2568286
     * </pre>
     *
     * Protobuf type {@code proto.Centroid}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.Centroid)
        proto.ClassSig.CentroidOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.ClassSig.internal_static_proto_Centroid_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.ClassSig.internal_static_proto_Centroid_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.ClassSig.Centroid.class, proto.ClassSig.Centroid.Builder.class);
      }

      // Construct using proto.ClassSig.Centroid.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();
        x_ = 0D;

        y_ = 0D;

        z_ = 0D;

        w_ = 0;

        return this;
      }

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

      @java.lang.Override
      public proto.ClassSig.Centroid getDefaultInstanceForType() {
        return proto.ClassSig.Centroid.getDefaultInstance();
      }

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

      @java.lang.Override
      public proto.ClassSig.Centroid buildPartial() {
        proto.ClassSig.Centroid result = new proto.ClassSig.Centroid(this);
        result.x_ = x_;
        result.y_ = y_;
        result.z_ = z_;
        result.w_ = w_;
        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.ClassSig.Centroid) {
          return mergeFrom((proto.ClassSig.Centroid)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.ClassSig.Centroid other) {
        if (other == proto.ClassSig.Centroid.getDefaultInstance()) return this;
        if (other.getX() != 0D) {
          setX(other.getX());
        }
        if (other.getY() != 0D) {
          setY(other.getY());
        }
        if (other.getZ() != 0D) {
          setZ(other.getZ());
        }
        if (other.getW() != 0) {
          setW(other.getW());
        }
        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.ClassSig.Centroid parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.ClassSig.Centroid) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private double x_ ;
      /**
       * <code>double x = 1;</code>
       */
      public double getX() {
        return x_;
      }
      /**
       * <code>double x = 1;</code>
       */
      public Builder setX(double value) {
        
        x_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double x = 1;</code>
       */
      public Builder clearX() {
        
        x_ = 0D;
        onChanged();
        return this;
      }

      private double y_ ;
      /**
       * <code>double y = 2;</code>
       */
      public double getY() {
        return y_;
      }
      /**
       * <code>double y = 2;</code>
       */
      public Builder setY(double value) {
        
        y_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double y = 2;</code>
       */
      public Builder clearY() {
        
        y_ = 0D;
        onChanged();
        return this;
      }

      private double z_ ;
      /**
       * <code>double z = 3;</code>
       */
      public double getZ() {
        return z_;
      }
      /**
       * <code>double z = 3;</code>
       */
      public Builder setZ(double value) {
        
        z_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double z = 3;</code>
       */
      public Builder clearZ() {
        
        z_ = 0D;
        onChanged();
        return this;
      }

      private int w_ ;
      /**
       * <code>int32 w = 4;</code>
       */
      public int getW() {
        return w_;
      }
      /**
       * <code>int32 w = 4;</code>
       */
      public Builder setW(int value) {
        
        w_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 w = 4;</code>
       */
      public Builder clearW() {
        
        w_ = 0;
        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.Centroid)
    }

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

    public static proto.ClassSig.Centroid getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.ClassSig.Centroid getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

    /**
     * <pre>
     * x, sequence number, use deterministic depth-first traversal to assign sequence number
     * </pre>
     *
     * <code>int32 sequence_number = 1;</code>
     */
    int getSequenceNumber();

    /**
     * <pre>
     * incoming edges, in degree is the number of incoming edges for a basic block
     * </pre>
     *
     * <code>int32 in_degree = 2;</code>
     */
    int getInDegree();

    /**
     * <pre>
     * y, outgoing edges, out degree is the number of outgoing edges in basic block
     * </pre>
     *
     * <code>int32 out_degree = 3;</code>
     */
    int getOutDegree();

    /**
     * <pre>
     * incoming edges, doesn't include exceptional edges
     * </pre>
     *
     * <code>int32 in_degree_unexceptional = 4;</code>
     */
    int getInDegreeUnexceptional();

    /**
     * <pre>
     * y, outgoing edges, doesn't include exceptional edges
     * </pre>
     *
     * <code>int32 out_degree_unexceptional = 5;</code>
     */
    int getOutDegreeUnexceptional();

    /**
     * <pre>
     * z, loop depth of the node, depth is the depth of loop
     * </pre>
     *
     * <code>int32 loop_depth = 6;</code>
     */
    int getLoopDepth();

    /**
     * <pre>
     * w, number of statements, total number of statements
     * </pre>
     *
     * <code>int32 stmt_count = 7;</code>
     */
    int getStmtCount();

    /**
     * <pre>
     * w', list of invoked method signatures
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 8;</code>
     */
    java.util.List<java.lang.String>
        getInvokedMethodSignaturesList();
    /**
     * <pre>
     * w', list of invoked method signatures
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 8;</code>
     */
    int getInvokedMethodSignaturesCount();
    /**
     * <pre>
     * w', list of invoked method signatures
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 8;</code>
     */
    java.lang.String getInvokedMethodSignatures(int index);
    /**
     * <pre>
     * w', list of invoked method signatures
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 8;</code>
     */
    com.google.protobuf.ByteString
        getInvokedMethodSignaturesBytes(int index);

    /**
     * <pre>
     * predecessors, represented using sequence number
     * </pre>
     *
     * <code>repeated int32 predecessors = 9;</code>
     */
    java.util.List<java.lang.Integer> getPredecessorsList();
    /**
     * <pre>
     * predecessors, represented using sequence number
     * </pre>
     *
     * <code>repeated int32 predecessors = 9;</code>
     */
    int getPredecessorsCount();
    /**
     * <pre>
     * predecessors, represented using sequence number
     * </pre>
     *
     * <code>repeated int32 predecessors = 9;</code>
     */
    int getPredecessors(int index);

    /**
     * <pre>
     * successors, represented using sequence number
     * </pre>
     *
     * <code>repeated int32 successors = 10;</code>
     */
    java.util.List<java.lang.Integer> getSuccessorsList();
    /**
     * <pre>
     * successors, represented using sequence number
     * </pre>
     *
     * <code>repeated int32 successors = 10;</code>
     */
    int getSuccessorsCount();
    /**
     * <pre>
     * successors, represented using sequence number
     * </pre>
     *
     * <code>repeated int32 successors = 10;</code>
     */
    int getSuccessors(int index);

    /**
     * <pre>
     * the dominator sequence number, used for debugging!
     * </pre>
     *
     * <code>int32 dominator_sequence_number = 11;</code>
     */
    int getDominatorSequenceNumber();
  }
  /**
   * Protobuf type {@code proto.BasicBlockProto}
   */
  public  static final class BasicBlockProto extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.BasicBlockProto)
      BasicBlockProtoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use BasicBlockProto.newBuilder() to construct.
    private BasicBlockProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private BasicBlockProto() {
      sequenceNumber_ = 0;
      inDegree_ = 0;
      outDegree_ = 0;
      inDegreeUnexceptional_ = 0;
      outDegreeUnexceptional_ = 0;
      loopDepth_ = 0;
      stmtCount_ = 0;
      invokedMethodSignatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      predecessors_ = java.util.Collections.emptyList();
      successors_ = java.util.Collections.emptyList();
      dominatorSequenceNumber_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private BasicBlockProto(
        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: {

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

              inDegree_ = input.readInt32();
              break;
            }
            case 24: {

              outDegree_ = input.readInt32();
              break;
            }
            case 32: {

              inDegreeUnexceptional_ = input.readInt32();
              break;
            }
            case 40: {

              outDegreeUnexceptional_ = input.readInt32();
              break;
            }
            case 48: {

              loopDepth_ = input.readInt32();
              break;
            }
            case 56: {

              stmtCount_ = input.readInt32();
              break;
            }
            case 66: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                invokedMethodSignatures_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000080;
              }
              invokedMethodSignatures_.add(s);
              break;
            }
            case 72: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                predecessors_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000100;
              }
              predecessors_.add(input.readInt32());
              break;
            }
            case 74: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100) && input.getBytesUntilLimit() > 0) {
                predecessors_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000100;
              }
              while (input.getBytesUntilLimit() > 0) {
                predecessors_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 80: {
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                successors_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000200;
              }
              successors_.add(input.readInt32());
              break;
            }
            case 82: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200) && input.getBytesUntilLimit() > 0) {
                successors_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000200;
              }
              while (input.getBytesUntilLimit() > 0) {
                successors_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 88: {

              dominatorSequenceNumber_ = input.readInt32();
              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)) {
          invokedMethodSignatures_ = invokedMethodSignatures_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          predecessors_ = java.util.Collections.unmodifiableList(predecessors_);
        }
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          successors_ = java.util.Collections.unmodifiableList(successors_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.ClassSig.internal_static_proto_BasicBlockProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.ClassSig.internal_static_proto_BasicBlockProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.ClassSig.BasicBlockProto.class, proto.ClassSig.BasicBlockProto.Builder.class);
    }

    private int bitField0_;
    public static final int SEQUENCE_NUMBER_FIELD_NUMBER = 1;
    private int sequenceNumber_;
    /**
     * <pre>
     * x, sequence number, use deterministic depth-first traversal to assign sequence number
     * </pre>
     *
     * <code>int32 sequence_number = 1;</code>
     */
    public int getSequenceNumber() {
      return sequenceNumber_;
    }

    public static final int IN_DEGREE_FIELD_NUMBER = 2;
    private int inDegree_;
    /**
     * <pre>
     * incoming edges, in degree is the number of incoming edges for a basic block
     * </pre>
     *
     * <code>int32 in_degree = 2;</code>
     */
    public int getInDegree() {
      return inDegree_;
    }

    public static final int OUT_DEGREE_FIELD_NUMBER = 3;
    private int outDegree_;
    /**
     * <pre>
     * y, outgoing edges, out degree is the number of outgoing edges in basic block
     * </pre>
     *
     * <code>int32 out_degree = 3;</code>
     */
    public int getOutDegree() {
      return outDegree_;
    }

    public static final int IN_DEGREE_UNEXCEPTIONAL_FIELD_NUMBER = 4;
    private int inDegreeUnexceptional_;
    /**
     * <pre>
     * incoming edges, doesn't include exceptional edges
     * </pre>
     *
     * <code>int32 in_degree_unexceptional = 4;</code>
     */
    public int getInDegreeUnexceptional() {
      return inDegreeUnexceptional_;
    }

    public static final int OUT_DEGREE_UNEXCEPTIONAL_FIELD_NUMBER = 5;
    private int outDegreeUnexceptional_;
    /**
     * <pre>
     * y, outgoing edges, doesn't include exceptional edges
     * </pre>
     *
     * <code>int32 out_degree_unexceptional = 5;</code>
     */
    public int getOutDegreeUnexceptional() {
      return outDegreeUnexceptional_;
    }

    public static final int LOOP_DEPTH_FIELD_NUMBER = 6;
    private int loopDepth_;
    /**
     * <pre>
     * z, loop depth of the node, depth is the depth of loop
     * </pre>
     *
     * <code>int32 loop_depth = 6;</code>
     */
    public int getLoopDepth() {
      return loopDepth_;
    }

    public static final int STMT_COUNT_FIELD_NUMBER = 7;
    private int stmtCount_;
    /**
     * <pre>
     * w, number of statements, total number of statements
     * </pre>
     *
     * <code>int32 stmt_count = 7;</code>
     */
    public int getStmtCount() {
      return stmtCount_;
    }

    public static final int INVOKED_METHOD_SIGNATURES_FIELD_NUMBER = 8;
    private com.google.protobuf.LazyStringList invokedMethodSignatures_;
    /**
     * <pre>
     * w', list of invoked method signatures
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 8;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getInvokedMethodSignaturesList() {
      return invokedMethodSignatures_;
    }
    /**
     * <pre>
     * w', list of invoked method signatures
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 8;</code>
     */
    public int getInvokedMethodSignaturesCount() {
      return invokedMethodSignatures_.size();
    }
    /**
     * <pre>
     * w', list of invoked method signatures
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 8;</code>
     */
    public java.lang.String getInvokedMethodSignatures(int index) {
      return invokedMethodSignatures_.get(index);
    }
    /**
     * <pre>
     * w', list of invoked method signatures
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 8;</code>
     */
    public com.google.protobuf.ByteString
        getInvokedMethodSignaturesBytes(int index) {
      return invokedMethodSignatures_.getByteString(index);
    }

    public static final int PREDECESSORS_FIELD_NUMBER = 9;
    private java.util.List<java.lang.Integer> predecessors_;
    /**
     * <pre>
     * predecessors, represented using sequence number
     * </pre>
     *
     * <code>repeated int32 predecessors = 9;</code>
     */
    public java.util.List<java.lang.Integer>
        getPredecessorsList() {
      return predecessors_;
    }
    /**
     * <pre>
     * predecessors, represented using sequence number
     * </pre>
     *
     * <code>repeated int32 predecessors = 9;</code>
     */
    public int getPredecessorsCount() {
      return predecessors_.size();
    }
    /**
     * <pre>
     * predecessors, represented using sequence number
     * </pre>
     *
     * <code>repeated int32 predecessors = 9;</code>
     */
    public int getPredecessors(int index) {
      return predecessors_.get(index);
    }
    private int predecessorsMemoizedSerializedSize = -1;

    public static final int SUCCESSORS_FIELD_NUMBER = 10;
    private java.util.List<java.lang.Integer> successors_;
    /**
     * <pre>
     * successors, represented using sequence number
     * </pre>
     *
     * <code>repeated int32 successors = 10;</code>
     */
    public java.util.List<java.lang.Integer>
        getSuccessorsList() {
      return successors_;
    }
    /**
     * <pre>
     * successors, represented using sequence number
     * </pre>
     *
     * <code>repeated int32 successors = 10;</code>
     */
    public int getSuccessorsCount() {
      return successors_.size();
    }
    /**
     * <pre>
     * successors, represented using sequence number
     * </pre>
     *
     * <code>repeated int32 successors = 10;</code>
     */
    public int getSuccessors(int index) {
      return successors_.get(index);
    }
    private int successorsMemoizedSerializedSize = -1;

    public static final int DOMINATOR_SEQUENCE_NUMBER_FIELD_NUMBER = 11;
    private int dominatorSequenceNumber_;
    /**
     * <pre>
     * the dominator sequence number, used for debugging!
     * </pre>
     *
     * <code>int32 dominator_sequence_number = 11;</code>
     */
    public int getDominatorSequenceNumber() {
      return dominatorSequenceNumber_;
    }

    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 {
      getSerializedSize();
      if (sequenceNumber_ != 0) {
        output.writeInt32(1, sequenceNumber_);
      }
      if (inDegree_ != 0) {
        output.writeInt32(2, inDegree_);
      }
      if (outDegree_ != 0) {
        output.writeInt32(3, outDegree_);
      }
      if (inDegreeUnexceptional_ != 0) {
        output.writeInt32(4, inDegreeUnexceptional_);
      }
      if (outDegreeUnexceptional_ != 0) {
        output.writeInt32(5, outDegreeUnexceptional_);
      }
      if (loopDepth_ != 0) {
        output.writeInt32(6, loopDepth_);
      }
      if (stmtCount_ != 0) {
        output.writeInt32(7, stmtCount_);
      }
      for (int i = 0; i < invokedMethodSignatures_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, invokedMethodSignatures_.getRaw(i));
      }
      if (getPredecessorsList().size() > 0) {
        output.writeUInt32NoTag(74);
        output.writeUInt32NoTag(predecessorsMemoizedSerializedSize);
      }
      for (int i = 0; i < predecessors_.size(); i++) {
        output.writeInt32NoTag(predecessors_.get(i));
      }
      if (getSuccessorsList().size() > 0) {
        output.writeUInt32NoTag(82);
        output.writeUInt32NoTag(successorsMemoizedSerializedSize);
      }
      for (int i = 0; i < successors_.size(); i++) {
        output.writeInt32NoTag(successors_.get(i));
      }
      if (dominatorSequenceNumber_ != 0) {
        output.writeInt32(11, dominatorSequenceNumber_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (sequenceNumber_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, sequenceNumber_);
      }
      if (inDegree_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, inDegree_);
      }
      if (outDegree_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, outDegree_);
      }
      if (inDegreeUnexceptional_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, inDegreeUnexceptional_);
      }
      if (outDegreeUnexceptional_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, outDegreeUnexceptional_);
      }
      if (loopDepth_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, loopDepth_);
      }
      if (stmtCount_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, stmtCount_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < invokedMethodSignatures_.size(); i++) {
          dataSize += computeStringSizeNoTag(invokedMethodSignatures_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getInvokedMethodSignaturesList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < predecessors_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(predecessors_.get(i));
        }
        size += dataSize;
        if (!getPredecessorsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        predecessorsMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < successors_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(successors_.get(i));
        }
        size += dataSize;
        if (!getSuccessorsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        successorsMemoizedSerializedSize = dataSize;
      }
      if (dominatorSequenceNumber_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(11, dominatorSequenceNumber_);
      }
      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.ClassSig.BasicBlockProto)) {
        return super.equals(obj);
      }
      proto.ClassSig.BasicBlockProto other = (proto.ClassSig.BasicBlockProto) obj;

      boolean result = true;
      result = result && (getSequenceNumber()
          == other.getSequenceNumber());
      result = result && (getInDegree()
          == other.getInDegree());
      result = result && (getOutDegree()
          == other.getOutDegree());
      result = result && (getInDegreeUnexceptional()
          == other.getInDegreeUnexceptional());
      result = result && (getOutDegreeUnexceptional()
          == other.getOutDegreeUnexceptional());
      result = result && (getLoopDepth()
          == other.getLoopDepth());
      result = result && (getStmtCount()
          == other.getStmtCount());
      result = result && getInvokedMethodSignaturesList()
          .equals(other.getInvokedMethodSignaturesList());
      result = result && getPredecessorsList()
          .equals(other.getPredecessorsList());
      result = result && getSuccessorsList()
          .equals(other.getSuccessorsList());
      result = result && (getDominatorSequenceNumber()
          == other.getDominatorSequenceNumber());
      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) + SEQUENCE_NUMBER_FIELD_NUMBER;
      hash = (53 * hash) + getSequenceNumber();
      hash = (37 * hash) + IN_DEGREE_FIELD_NUMBER;
      hash = (53 * hash) + getInDegree();
      hash = (37 * hash) + OUT_DEGREE_FIELD_NUMBER;
      hash = (53 * hash) + getOutDegree();
      hash = (37 * hash) + IN_DEGREE_UNEXCEPTIONAL_FIELD_NUMBER;
      hash = (53 * hash) + getInDegreeUnexceptional();
      hash = (37 * hash) + OUT_DEGREE_UNEXCEPTIONAL_FIELD_NUMBER;
      hash = (53 * hash) + getOutDegreeUnexceptional();
      hash = (37 * hash) + LOOP_DEPTH_FIELD_NUMBER;
      hash = (53 * hash) + getLoopDepth();
      hash = (37 * hash) + STMT_COUNT_FIELD_NUMBER;
      hash = (53 * hash) + getStmtCount();
      if (getInvokedMethodSignaturesCount() > 0) {
        hash = (37 * hash) + INVOKED_METHOD_SIGNATURES_FIELD_NUMBER;
        hash = (53 * hash) + getInvokedMethodSignaturesList().hashCode();
      }
      if (getPredecessorsCount() > 0) {
        hash = (37 * hash) + PREDECESSORS_FIELD_NUMBER;
        hash = (53 * hash) + getPredecessorsList().hashCode();
      }
      if (getSuccessorsCount() > 0) {
        hash = (37 * hash) + SUCCESSORS_FIELD_NUMBER;
        hash = (53 * hash) + getSuccessorsList().hashCode();
      }
      hash = (37 * hash) + DOMINATOR_SEQUENCE_NUMBER_FIELD_NUMBER;
      hash = (53 * hash) + getDominatorSequenceNumber();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.ClassSig.BasicBlockProto parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.BasicBlockProto parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.BasicBlockProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.BasicBlockProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.BasicBlockProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.BasicBlockProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.BasicBlockProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.BasicBlockProto 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.ClassSig.BasicBlockProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.ClassSig.BasicBlockProto 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.ClassSig.BasicBlockProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.BasicBlockProto 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.ClassSig.BasicBlockProto 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.BasicBlockProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.BasicBlockProto)
        proto.ClassSig.BasicBlockProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.ClassSig.internal_static_proto_BasicBlockProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.ClassSig.internal_static_proto_BasicBlockProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.ClassSig.BasicBlockProto.class, proto.ClassSig.BasicBlockProto.Builder.class);
      }

      // Construct using proto.ClassSig.BasicBlockProto.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();
        sequenceNumber_ = 0;

        inDegree_ = 0;

        outDegree_ = 0;

        inDegreeUnexceptional_ = 0;

        outDegreeUnexceptional_ = 0;

        loopDepth_ = 0;

        stmtCount_ = 0;

        invokedMethodSignatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000080);
        predecessors_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000100);
        successors_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000200);
        dominatorSequenceNumber_ = 0;

        return this;
      }

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

      @java.lang.Override
      public proto.ClassSig.BasicBlockProto getDefaultInstanceForType() {
        return proto.ClassSig.BasicBlockProto.getDefaultInstance();
      }

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

      @java.lang.Override
      public proto.ClassSig.BasicBlockProto buildPartial() {
        proto.ClassSig.BasicBlockProto result = new proto.ClassSig.BasicBlockProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.sequenceNumber_ = sequenceNumber_;
        result.inDegree_ = inDegree_;
        result.outDegree_ = outDegree_;
        result.inDegreeUnexceptional_ = inDegreeUnexceptional_;
        result.outDegreeUnexceptional_ = outDegreeUnexceptional_;
        result.loopDepth_ = loopDepth_;
        result.stmtCount_ = stmtCount_;
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          invokedMethodSignatures_ = invokedMethodSignatures_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000080);
        }
        result.invokedMethodSignatures_ = invokedMethodSignatures_;
        if (((bitField0_ & 0x00000100) == 0x00000100)) {
          predecessors_ = java.util.Collections.unmodifiableList(predecessors_);
          bitField0_ = (bitField0_ & ~0x00000100);
        }
        result.predecessors_ = predecessors_;
        if (((bitField0_ & 0x00000200) == 0x00000200)) {
          successors_ = java.util.Collections.unmodifiableList(successors_);
          bitField0_ = (bitField0_ & ~0x00000200);
        }
        result.successors_ = successors_;
        result.dominatorSequenceNumber_ = dominatorSequenceNumber_;
        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.ClassSig.BasicBlockProto) {
          return mergeFrom((proto.ClassSig.BasicBlockProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.ClassSig.BasicBlockProto other) {
        if (other == proto.ClassSig.BasicBlockProto.getDefaultInstance()) return this;
        if (other.getSequenceNumber() != 0) {
          setSequenceNumber(other.getSequenceNumber());
        }
        if (other.getInDegree() != 0) {
          setInDegree(other.getInDegree());
        }
        if (other.getOutDegree() != 0) {
          setOutDegree(other.getOutDegree());
        }
        if (other.getInDegreeUnexceptional() != 0) {
          setInDegreeUnexceptional(other.getInDegreeUnexceptional());
        }
        if (other.getOutDegreeUnexceptional() != 0) {
          setOutDegreeUnexceptional(other.getOutDegreeUnexceptional());
        }
        if (other.getLoopDepth() != 0) {
          setLoopDepth(other.getLoopDepth());
        }
        if (other.getStmtCount() != 0) {
          setStmtCount(other.getStmtCount());
        }
        if (!other.invokedMethodSignatures_.isEmpty()) {
          if (invokedMethodSignatures_.isEmpty()) {
            invokedMethodSignatures_ = other.invokedMethodSignatures_;
            bitField0_ = (bitField0_ & ~0x00000080);
          } else {
            ensureInvokedMethodSignaturesIsMutable();
            invokedMethodSignatures_.addAll(other.invokedMethodSignatures_);
          }
          onChanged();
        }
        if (!other.predecessors_.isEmpty()) {
          if (predecessors_.isEmpty()) {
            predecessors_ = other.predecessors_;
            bitField0_ = (bitField0_ & ~0x00000100);
          } else {
            ensurePredecessorsIsMutable();
            predecessors_.addAll(other.predecessors_);
          }
          onChanged();
        }
        if (!other.successors_.isEmpty()) {
          if (successors_.isEmpty()) {
            successors_ = other.successors_;
            bitField0_ = (bitField0_ & ~0x00000200);
          } else {
            ensureSuccessorsIsMutable();
            successors_.addAll(other.successors_);
          }
          onChanged();
        }
        if (other.getDominatorSequenceNumber() != 0) {
          setDominatorSequenceNumber(other.getDominatorSequenceNumber());
        }
        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.ClassSig.BasicBlockProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.ClassSig.BasicBlockProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int sequenceNumber_ ;
      /**
       * <pre>
       * x, sequence number, use deterministic depth-first traversal to assign sequence number
       * </pre>
       *
       * <code>int32 sequence_number = 1;</code>
       */
      public int getSequenceNumber() {
        return sequenceNumber_;
      }
      /**
       * <pre>
       * x, sequence number, use deterministic depth-first traversal to assign sequence number
       * </pre>
       *
       * <code>int32 sequence_number = 1;</code>
       */
      public Builder setSequenceNumber(int value) {
        
        sequenceNumber_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * x, sequence number, use deterministic depth-first traversal to assign sequence number
       * </pre>
       *
       * <code>int32 sequence_number = 1;</code>
       */
      public Builder clearSequenceNumber() {
        
        sequenceNumber_ = 0;
        onChanged();
        return this;
      }

      private int inDegree_ ;
      /**
       * <pre>
       * incoming edges, in degree is the number of incoming edges for a basic block
       * </pre>
       *
       * <code>int32 in_degree = 2;</code>
       */
      public int getInDegree() {
        return inDegree_;
      }
      /**
       * <pre>
       * incoming edges, in degree is the number of incoming edges for a basic block
       * </pre>
       *
       * <code>int32 in_degree = 2;</code>
       */
      public Builder setInDegree(int value) {
        
        inDegree_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * incoming edges, in degree is the number of incoming edges for a basic block
       * </pre>
       *
       * <code>int32 in_degree = 2;</code>
       */
      public Builder clearInDegree() {
        
        inDegree_ = 0;
        onChanged();
        return this;
      }

      private int outDegree_ ;
      /**
       * <pre>
       * y, outgoing edges, out degree is the number of outgoing edges in basic block
       * </pre>
       *
       * <code>int32 out_degree = 3;</code>
       */
      public int getOutDegree() {
        return outDegree_;
      }
      /**
       * <pre>
       * y, outgoing edges, out degree is the number of outgoing edges in basic block
       * </pre>
       *
       * <code>int32 out_degree = 3;</code>
       */
      public Builder setOutDegree(int value) {
        
        outDegree_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * y, outgoing edges, out degree is the number of outgoing edges in basic block
       * </pre>
       *
       * <code>int32 out_degree = 3;</code>
       */
      public Builder clearOutDegree() {
        
        outDegree_ = 0;
        onChanged();
        return this;
      }

      private int inDegreeUnexceptional_ ;
      /**
       * <pre>
       * incoming edges, doesn't include exceptional edges
       * </pre>
       *
       * <code>int32 in_degree_unexceptional = 4;</code>
       */
      public int getInDegreeUnexceptional() {
        return inDegreeUnexceptional_;
      }
      /**
       * <pre>
       * incoming edges, doesn't include exceptional edges
       * </pre>
       *
       * <code>int32 in_degree_unexceptional = 4;</code>
       */
      public Builder setInDegreeUnexceptional(int value) {
        
        inDegreeUnexceptional_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * incoming edges, doesn't include exceptional edges
       * </pre>
       *
       * <code>int32 in_degree_unexceptional = 4;</code>
       */
      public Builder clearInDegreeUnexceptional() {
        
        inDegreeUnexceptional_ = 0;
        onChanged();
        return this;
      }

      private int outDegreeUnexceptional_ ;
      /**
       * <pre>
       * y, outgoing edges, doesn't include exceptional edges
       * </pre>
       *
       * <code>int32 out_degree_unexceptional = 5;</code>
       */
      public int getOutDegreeUnexceptional() {
        return outDegreeUnexceptional_;
      }
      /**
       * <pre>
       * y, outgoing edges, doesn't include exceptional edges
       * </pre>
       *
       * <code>int32 out_degree_unexceptional = 5;</code>
       */
      public Builder setOutDegreeUnexceptional(int value) {
        
        outDegreeUnexceptional_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * y, outgoing edges, doesn't include exceptional edges
       * </pre>
       *
       * <code>int32 out_degree_unexceptional = 5;</code>
       */
      public Builder clearOutDegreeUnexceptional() {
        
        outDegreeUnexceptional_ = 0;
        onChanged();
        return this;
      }

      private int loopDepth_ ;
      /**
       * <pre>
       * z, loop depth of the node, depth is the depth of loop
       * </pre>
       *
       * <code>int32 loop_depth = 6;</code>
       */
      public int getLoopDepth() {
        return loopDepth_;
      }
      /**
       * <pre>
       * z, loop depth of the node, depth is the depth of loop
       * </pre>
       *
       * <code>int32 loop_depth = 6;</code>
       */
      public Builder setLoopDepth(int value) {
        
        loopDepth_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * z, loop depth of the node, depth is the depth of loop
       * </pre>
       *
       * <code>int32 loop_depth = 6;</code>
       */
      public Builder clearLoopDepth() {
        
        loopDepth_ = 0;
        onChanged();
        return this;
      }

      private int stmtCount_ ;
      /**
       * <pre>
       * w, number of statements, total number of statements
       * </pre>
       *
       * <code>int32 stmt_count = 7;</code>
       */
      public int getStmtCount() {
        return stmtCount_;
      }
      /**
       * <pre>
       * w, number of statements, total number of statements
       * </pre>
       *
       * <code>int32 stmt_count = 7;</code>
       */
      public Builder setStmtCount(int value) {
        
        stmtCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * w, number of statements, total number of statements
       * </pre>
       *
       * <code>int32 stmt_count = 7;</code>
       */
      public Builder clearStmtCount() {
        
        stmtCount_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList invokedMethodSignatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureInvokedMethodSignaturesIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          invokedMethodSignatures_ = new com.google.protobuf.LazyStringArrayList(invokedMethodSignatures_);
          bitField0_ |= 0x00000080;
         }
      }
      /**
       * <pre>
       * w', list of invoked method signatures
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 8;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getInvokedMethodSignaturesList() {
        return invokedMethodSignatures_.getUnmodifiableView();
      }
      /**
       * <pre>
       * w', list of invoked method signatures
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 8;</code>
       */
      public int getInvokedMethodSignaturesCount() {
        return invokedMethodSignatures_.size();
      }
      /**
       * <pre>
       * w', list of invoked method signatures
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 8;</code>
       */
      public java.lang.String getInvokedMethodSignatures(int index) {
        return invokedMethodSignatures_.get(index);
      }
      /**
       * <pre>
       * w', list of invoked method signatures
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 8;</code>
       */
      public com.google.protobuf.ByteString
          getInvokedMethodSignaturesBytes(int index) {
        return invokedMethodSignatures_.getByteString(index);
      }
      /**
       * <pre>
       * w', list of invoked method signatures
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 8;</code>
       */
      public Builder setInvokedMethodSignatures(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureInvokedMethodSignaturesIsMutable();
        invokedMethodSignatures_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * w', list of invoked method signatures
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 8;</code>
       */
      public Builder addInvokedMethodSignatures(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureInvokedMethodSignaturesIsMutable();
        invokedMethodSignatures_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * w', list of invoked method signatures
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 8;</code>
       */
      public Builder addAllInvokedMethodSignatures(
          java.lang.Iterable<java.lang.String> values) {
        ensureInvokedMethodSignaturesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, invokedMethodSignatures_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * w', list of invoked method signatures
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 8;</code>
       */
      public Builder clearInvokedMethodSignatures() {
        invokedMethodSignatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * w', list of invoked method signatures
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 8;</code>
       */
      public Builder addInvokedMethodSignaturesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureInvokedMethodSignaturesIsMutable();
        invokedMethodSignatures_.add(value);
        onChanged();
        return this;
      }

      private java.util.List<java.lang.Integer> predecessors_ = java.util.Collections.emptyList();
      private void ensurePredecessorsIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          predecessors_ = new java.util.ArrayList<java.lang.Integer>(predecessors_);
          bitField0_ |= 0x00000100;
         }
      }
      /**
       * <pre>
       * predecessors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 predecessors = 9;</code>
       */
      public java.util.List<java.lang.Integer>
          getPredecessorsList() {
        return java.util.Collections.unmodifiableList(predecessors_);
      }
      /**
       * <pre>
       * predecessors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 predecessors = 9;</code>
       */
      public int getPredecessorsCount() {
        return predecessors_.size();
      }
      /**
       * <pre>
       * predecessors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 predecessors = 9;</code>
       */
      public int getPredecessors(int index) {
        return predecessors_.get(index);
      }
      /**
       * <pre>
       * predecessors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 predecessors = 9;</code>
       */
      public Builder setPredecessors(
          int index, int value) {
        ensurePredecessorsIsMutable();
        predecessors_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * predecessors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 predecessors = 9;</code>
       */
      public Builder addPredecessors(int value) {
        ensurePredecessorsIsMutable();
        predecessors_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * predecessors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 predecessors = 9;</code>
       */
      public Builder addAllPredecessors(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensurePredecessorsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, predecessors_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * predecessors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 predecessors = 9;</code>
       */
      public Builder clearPredecessors() {
        predecessors_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }

      private java.util.List<java.lang.Integer> successors_ = java.util.Collections.emptyList();
      private void ensureSuccessorsIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          successors_ = new java.util.ArrayList<java.lang.Integer>(successors_);
          bitField0_ |= 0x00000200;
         }
      }
      /**
       * <pre>
       * successors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 successors = 10;</code>
       */
      public java.util.List<java.lang.Integer>
          getSuccessorsList() {
        return java.util.Collections.unmodifiableList(successors_);
      }
      /**
       * <pre>
       * successors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 successors = 10;</code>
       */
      public int getSuccessorsCount() {
        return successors_.size();
      }
      /**
       * <pre>
       * successors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 successors = 10;</code>
       */
      public int getSuccessors(int index) {
        return successors_.get(index);
      }
      /**
       * <pre>
       * successors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 successors = 10;</code>
       */
      public Builder setSuccessors(
          int index, int value) {
        ensureSuccessorsIsMutable();
        successors_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * successors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 successors = 10;</code>
       */
      public Builder addSuccessors(int value) {
        ensureSuccessorsIsMutable();
        successors_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * successors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 successors = 10;</code>
       */
      public Builder addAllSuccessors(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureSuccessorsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, successors_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * successors, represented using sequence number
       * </pre>
       *
       * <code>repeated int32 successors = 10;</code>
       */
      public Builder clearSuccessors() {
        successors_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000200);
        onChanged();
        return this;
      }

      private int dominatorSequenceNumber_ ;
      /**
       * <pre>
       * the dominator sequence number, used for debugging!
       * </pre>
       *
       * <code>int32 dominator_sequence_number = 11;</code>
       */
      public int getDominatorSequenceNumber() {
        return dominatorSequenceNumber_;
      }
      /**
       * <pre>
       * the dominator sequence number, used for debugging!
       * </pre>
       *
       * <code>int32 dominator_sequence_number = 11;</code>
       */
      public Builder setDominatorSequenceNumber(int value) {
        
        dominatorSequenceNumber_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * the dominator sequence number, used for debugging!
       * </pre>
       *
       * <code>int32 dominator_sequence_number = 11;</code>
       */
      public Builder clearDominatorSequenceNumber() {
        
        dominatorSequenceNumber_ = 0;
        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.BasicBlockProto)
    }

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

    public static proto.ClassSig.BasicBlockProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.ClassSig.BasicBlockProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

    /**
     * <code>string class_name = 1;</code>
     */
    java.lang.String getClassName();
    /**
     * <code>string class_name = 1;</code>
     */
    com.google.protobuf.ByteString
        getClassNameBytes();

    /**
     * <code>string method_name = 2;</code>
     */
    java.lang.String getMethodName();
    /**
     * <code>string method_name = 2;</code>
     */
    com.google.protobuf.ByteString
        getMethodNameBytes();

    /**
     * <code>string method_signature = 3;</code>
     */
    java.lang.String getMethodSignature();
    /**
     * <code>string method_signature = 3;</code>
     */
    com.google.protobuf.ByteString
        getMethodSignatureBytes();

    /**
     * <code>string method_subsignature = 4;</code>
     */
    java.lang.String getMethodSubsignature();
    /**
     * <code>string method_subsignature = 4;</code>
     */
    com.google.protobuf.ByteString
        getMethodSubsignatureBytes();

    /**
     * <code>repeated string paramter_types = 5;</code>
     */
    java.util.List<java.lang.String>
        getParamterTypesList();
    /**
     * <code>repeated string paramter_types = 5;</code>
     */
    int getParamterTypesCount();
    /**
     * <code>repeated string paramter_types = 5;</code>
     */
    java.lang.String getParamterTypes(int index);
    /**
     * <code>repeated string paramter_types = 5;</code>
     */
    com.google.protobuf.ByteString
        getParamterTypesBytes(int index);

    /**
     * <code>string return_type = 6;</code>
     */
    java.lang.String getReturnType();
    /**
     * <code>string return_type = 6;</code>
     */
    com.google.protobuf.ByteString
        getReturnTypeBytes();

    /**
     * <code>repeated string local_types = 7;</code>
     */
    java.util.List<java.lang.String>
        getLocalTypesList();
    /**
     * <code>repeated string local_types = 7;</code>
     */
    int getLocalTypesCount();
    /**
     * <code>repeated string local_types = 7;</code>
     */
    java.lang.String getLocalTypes(int index);
    /**
     * <code>repeated string local_types = 7;</code>
     */
    com.google.protobuf.ByteString
        getLocalTypesBytes(int index);

    /**
     * <code>repeated string string_constants = 8;</code>
     */
    java.util.List<java.lang.String>
        getStringConstantsList();
    /**
     * <code>repeated string string_constants = 8;</code>
     */
    int getStringConstantsCount();
    /**
     * <code>repeated string string_constants = 8;</code>
     */
    java.lang.String getStringConstants(int index);
    /**
     * <code>repeated string string_constants = 8;</code>
     */
    com.google.protobuf.ByteString
        getStringConstantsBytes(int index);

    /**
     * <pre>
     * The methods that this method invokes, specially we want to check if it is a API method
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 9;</code>
     */
    java.util.List<java.lang.String>
        getInvokedMethodSignaturesList();
    /**
     * <pre>
     * The methods that this method invokes, specially we want to check if it is a API method
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 9;</code>
     */
    int getInvokedMethodSignaturesCount();
    /**
     * <pre>
     * The methods that this method invokes, specially we want to check if it is a API method
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 9;</code>
     */
    java.lang.String getInvokedMethodSignatures(int index);
    /**
     * <pre>
     * The methods that this method invokes, specially we want to check if it is a API method
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 9;</code>
     */
    com.google.protobuf.ByteString
        getInvokedMethodSignaturesBytes(int index);

    /**
     * <code>repeated string resource_refs = 10;</code>
     */
    java.util.List<java.lang.String>
        getResourceRefsList();
    /**
     * <code>repeated string resource_refs = 10;</code>
     */
    int getResourceRefsCount();
    /**
     * <code>repeated string resource_refs = 10;</code>
     */
    java.lang.String getResourceRefs(int index);
    /**
     * <code>repeated string resource_refs = 10;</code>
     */
    com.google.protobuf.ByteString
        getResourceRefsBytes(int index);

    /**
     * <code>repeated string statements = 11;</code>
     */
    java.util.List<java.lang.String>
        getStatementsList();
    /**
     * <code>repeated string statements = 11;</code>
     */
    int getStatementsCount();
    /**
     * <code>repeated string statements = 11;</code>
     */
    java.lang.String getStatements(int index);
    /**
     * <code>repeated string statements = 11;</code>
     */
    com.google.protobuf.ByteString
        getStatementsBytes(int index);

    /**
     * <code>string modifiers = 12;</code>
     */
    java.lang.String getModifiers();
    /**
     * <code>string modifiers = 12;</code>
     */
    com.google.protobuf.ByteString
        getModifiersBytes();

    /**
     * <code>.proto.Centroid centroid = 13;</code>
     */
    boolean hasCentroid();
    /**
     * <code>.proto.Centroid centroid = 13;</code>
     */
    proto.ClassSig.Centroid getCentroid();
    /**
     * <code>.proto.Centroid centroid = 13;</code>
     */
    proto.ClassSig.CentroidOrBuilder getCentroidOrBuilder();

    /**
     * <code>.proto.Centroid centroid_with_invoke = 14;</code>
     */
    boolean hasCentroidWithInvoke();
    /**
     * <code>.proto.Centroid centroid_with_invoke = 14;</code>
     */
    proto.ClassSig.Centroid getCentroidWithInvoke();
    /**
     * <code>.proto.Centroid centroid_with_invoke = 14;</code>
     */
    proto.ClassSig.CentroidOrBuilder getCentroidWithInvokeOrBuilder();

    /**
     * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
     */
    java.util.List<proto.ClassSig.BasicBlockProto> 
        getBlocksList();
    /**
     * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
     */
    proto.ClassSig.BasicBlockProto getBlocks(int index);
    /**
     * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
     */
    int getBlocksCount();
    /**
     * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
     */
    java.util.List<? extends proto.ClassSig.BasicBlockProtoOrBuilder> 
        getBlocksOrBuilderList();
    /**
     * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
     */
    proto.ClassSig.BasicBlockProtoOrBuilder getBlocksOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code proto.MethodAttributeProto}
   */
  public  static final class MethodAttributeProto extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.MethodAttributeProto)
      MethodAttributeProtoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use MethodAttributeProto.newBuilder() to construct.
    private MethodAttributeProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private MethodAttributeProto() {
      className_ = "";
      methodName_ = "";
      methodSignature_ = "";
      methodSubsignature_ = "";
      paramterTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      returnType_ = "";
      localTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      stringConstants_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      invokedMethodSignatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      resourceRefs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      statements_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      modifiers_ = "";
      blocks_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private MethodAttributeProto(
        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();

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

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

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

              methodSubsignature_ = s;
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                paramterTypes_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000010;
              }
              paramterTypes_.add(s);
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();

              returnType_ = s;
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                localTypes_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000040;
              }
              localTypes_.add(s);
              break;
            }
            case 66: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                stringConstants_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000080;
              }
              stringConstants_.add(s);
              break;
            }
            case 74: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                invokedMethodSignatures_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000100;
              }
              invokedMethodSignatures_.add(s);
              break;
            }
            case 82: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                resourceRefs_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000200;
              }
              resourceRefs_.add(s);
              break;
            }
            case 90: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
                statements_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000400;
              }
              statements_.add(s);
              break;
            }
            case 98: {
              java.lang.String s = input.readStringRequireUtf8();

              modifiers_ = s;
              break;
            }
            case 106: {
              proto.ClassSig.Centroid.Builder subBuilder = null;
              if (centroid_ != null) {
                subBuilder = centroid_.toBuilder();
              }
              centroid_ = input.readMessage(proto.ClassSig.Centroid.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(centroid_);
                centroid_ = subBuilder.buildPartial();
              }

              break;
            }
            case 114: {
              proto.ClassSig.Centroid.Builder subBuilder = null;
              if (centroidWithInvoke_ != null) {
                subBuilder = centroidWithInvoke_.toBuilder();
              }
              centroidWithInvoke_ = input.readMessage(proto.ClassSig.Centroid.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(centroidWithInvoke_);
                centroidWithInvoke_ = subBuilder.buildPartial();
              }

              break;
            }
            case 122: {
              if (!((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
                blocks_ = new java.util.ArrayList<proto.ClassSig.BasicBlockProto>();
                mutable_bitField0_ |= 0x00004000;
              }
              blocks_.add(
                  input.readMessage(proto.ClassSig.BasicBlockProto.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_ & 0x00000010) == 0x00000010)) {
          paramterTypes_ = paramterTypes_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          localTypes_ = localTypes_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
          stringConstants_ = stringConstants_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          invokedMethodSignatures_ = invokedMethodSignatures_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          resourceRefs_ = resourceRefs_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
          statements_ = statements_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
          blocks_ = java.util.Collections.unmodifiableList(blocks_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.ClassSig.internal_static_proto_MethodAttributeProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.ClassSig.internal_static_proto_MethodAttributeProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.ClassSig.MethodAttributeProto.class, proto.ClassSig.MethodAttributeProto.Builder.class);
    }

    private int bitField0_;
    public static final int CLASS_NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object className_;
    /**
     * <code>string class_name = 1;</code>
     */
    public java.lang.String getClassName() {
      java.lang.Object ref = className_;
      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();
        className_ = s;
        return s;
      }
    }
    /**
     * <code>string class_name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getClassNameBytes() {
      java.lang.Object ref = className_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        className_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int METHOD_NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object methodName_;
    /**
     * <code>string method_name = 2;</code>
     */
    public java.lang.String getMethodName() {
      java.lang.Object ref = methodName_;
      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();
        methodName_ = s;
        return s;
      }
    }
    /**
     * <code>string method_name = 2;</code>
     */
    public com.google.protobuf.ByteString
        getMethodNameBytes() {
      java.lang.Object ref = methodName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        methodName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int METHOD_SIGNATURE_FIELD_NUMBER = 3;
    private volatile java.lang.Object methodSignature_;
    /**
     * <code>string method_signature = 3;</code>
     */
    public java.lang.String getMethodSignature() {
      java.lang.Object ref = methodSignature_;
      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();
        methodSignature_ = s;
        return s;
      }
    }
    /**
     * <code>string method_signature = 3;</code>
     */
    public com.google.protobuf.ByteString
        getMethodSignatureBytes() {
      java.lang.Object ref = methodSignature_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        methodSignature_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int METHOD_SUBSIGNATURE_FIELD_NUMBER = 4;
    private volatile java.lang.Object methodSubsignature_;
    /**
     * <code>string method_subsignature = 4;</code>
     */
    public java.lang.String getMethodSubsignature() {
      java.lang.Object ref = methodSubsignature_;
      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();
        methodSubsignature_ = s;
        return s;
      }
    }
    /**
     * <code>string method_subsignature = 4;</code>
     */
    public com.google.protobuf.ByteString
        getMethodSubsignatureBytes() {
      java.lang.Object ref = methodSubsignature_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        methodSubsignature_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PARAMTER_TYPES_FIELD_NUMBER = 5;
    private com.google.protobuf.LazyStringList paramterTypes_;
    /**
     * <code>repeated string paramter_types = 5;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getParamterTypesList() {
      return paramterTypes_;
    }
    /**
     * <code>repeated string paramter_types = 5;</code>
     */
    public int getParamterTypesCount() {
      return paramterTypes_.size();
    }
    /**
     * <code>repeated string paramter_types = 5;</code>
     */
    public java.lang.String getParamterTypes(int index) {
      return paramterTypes_.get(index);
    }
    /**
     * <code>repeated string paramter_types = 5;</code>
     */
    public com.google.protobuf.ByteString
        getParamterTypesBytes(int index) {
      return paramterTypes_.getByteString(index);
    }

    public static final int RETURN_TYPE_FIELD_NUMBER = 6;
    private volatile java.lang.Object returnType_;
    /**
     * <code>string return_type = 6;</code>
     */
    public java.lang.String getReturnType() {
      java.lang.Object ref = returnType_;
      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();
        returnType_ = s;
        return s;
      }
    }
    /**
     * <code>string return_type = 6;</code>
     */
    public com.google.protobuf.ByteString
        getReturnTypeBytes() {
      java.lang.Object ref = returnType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        returnType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LOCAL_TYPES_FIELD_NUMBER = 7;
    private com.google.protobuf.LazyStringList localTypes_;
    /**
     * <code>repeated string local_types = 7;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getLocalTypesList() {
      return localTypes_;
    }
    /**
     * <code>repeated string local_types = 7;</code>
     */
    public int getLocalTypesCount() {
      return localTypes_.size();
    }
    /**
     * <code>repeated string local_types = 7;</code>
     */
    public java.lang.String getLocalTypes(int index) {
      return localTypes_.get(index);
    }
    /**
     * <code>repeated string local_types = 7;</code>
     */
    public com.google.protobuf.ByteString
        getLocalTypesBytes(int index) {
      return localTypes_.getByteString(index);
    }

    public static final int STRING_CONSTANTS_FIELD_NUMBER = 8;
    private com.google.protobuf.LazyStringList stringConstants_;
    /**
     * <code>repeated string string_constants = 8;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getStringConstantsList() {
      return stringConstants_;
    }
    /**
     * <code>repeated string string_constants = 8;</code>
     */
    public int getStringConstantsCount() {
      return stringConstants_.size();
    }
    /**
     * <code>repeated string string_constants = 8;</code>
     */
    public java.lang.String getStringConstants(int index) {
      return stringConstants_.get(index);
    }
    /**
     * <code>repeated string string_constants = 8;</code>
     */
    public com.google.protobuf.ByteString
        getStringConstantsBytes(int index) {
      return stringConstants_.getByteString(index);
    }

    public static final int INVOKED_METHOD_SIGNATURES_FIELD_NUMBER = 9;
    private com.google.protobuf.LazyStringList invokedMethodSignatures_;
    /**
     * <pre>
     * The methods that this method invokes, specially we want to check if it is a API method
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 9;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getInvokedMethodSignaturesList() {
      return invokedMethodSignatures_;
    }
    /**
     * <pre>
     * The methods that this method invokes, specially we want to check if it is a API method
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 9;</code>
     */
    public int getInvokedMethodSignaturesCount() {
      return invokedMethodSignatures_.size();
    }
    /**
     * <pre>
     * The methods that this method invokes, specially we want to check if it is a API method
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 9;</code>
     */
    public java.lang.String getInvokedMethodSignatures(int index) {
      return invokedMethodSignatures_.get(index);
    }
    /**
     * <pre>
     * The methods that this method invokes, specially we want to check if it is a API method
     * </pre>
     *
     * <code>repeated string invoked_method_signatures = 9;</code>
     */
    public com.google.protobuf.ByteString
        getInvokedMethodSignaturesBytes(int index) {
      return invokedMethodSignatures_.getByteString(index);
    }

    public static final int RESOURCE_REFS_FIELD_NUMBER = 10;
    private com.google.protobuf.LazyStringList resourceRefs_;
    /**
     * <code>repeated string resource_refs = 10;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getResourceRefsList() {
      return resourceRefs_;
    }
    /**
     * <code>repeated string resource_refs = 10;</code>
     */
    public int getResourceRefsCount() {
      return resourceRefs_.size();
    }
    /**
     * <code>repeated string resource_refs = 10;</code>
     */
    public java.lang.String getResourceRefs(int index) {
      return resourceRefs_.get(index);
    }
    /**
     * <code>repeated string resource_refs = 10;</code>
     */
    public com.google.protobuf.ByteString
        getResourceRefsBytes(int index) {
      return resourceRefs_.getByteString(index);
    }

    public static final int STATEMENTS_FIELD_NUMBER = 11;
    private com.google.protobuf.LazyStringList statements_;
    /**
     * <code>repeated string statements = 11;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getStatementsList() {
      return statements_;
    }
    /**
     * <code>repeated string statements = 11;</code>
     */
    public int getStatementsCount() {
      return statements_.size();
    }
    /**
     * <code>repeated string statements = 11;</code>
     */
    public java.lang.String getStatements(int index) {
      return statements_.get(index);
    }
    /**
     * <code>repeated string statements = 11;</code>
     */
    public com.google.protobuf.ByteString
        getStatementsBytes(int index) {
      return statements_.getByteString(index);
    }

    public static final int MODIFIERS_FIELD_NUMBER = 12;
    private volatile java.lang.Object modifiers_;
    /**
     * <code>string modifiers = 12;</code>
     */
    public java.lang.String getModifiers() {
      java.lang.Object ref = modifiers_;
      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();
        modifiers_ = s;
        return s;
      }
    }
    /**
     * <code>string modifiers = 12;</code>
     */
    public com.google.protobuf.ByteString
        getModifiersBytes() {
      java.lang.Object ref = modifiers_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        modifiers_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CENTROID_FIELD_NUMBER = 13;
    private proto.ClassSig.Centroid centroid_;
    /**
     * <code>.proto.Centroid centroid = 13;</code>
     */
    public boolean hasCentroid() {
      return centroid_ != null;
    }
    /**
     * <code>.proto.Centroid centroid = 13;</code>
     */
    public proto.ClassSig.Centroid getCentroid() {
      return centroid_ == null ? proto.ClassSig.Centroid.getDefaultInstance() : centroid_;
    }
    /**
     * <code>.proto.Centroid centroid = 13;</code>
     */
    public proto.ClassSig.CentroidOrBuilder getCentroidOrBuilder() {
      return getCentroid();
    }

    public static final int CENTROID_WITH_INVOKE_FIELD_NUMBER = 14;
    private proto.ClassSig.Centroid centroidWithInvoke_;
    /**
     * <code>.proto.Centroid centroid_with_invoke = 14;</code>
     */
    public boolean hasCentroidWithInvoke() {
      return centroidWithInvoke_ != null;
    }
    /**
     * <code>.proto.Centroid centroid_with_invoke = 14;</code>
     */
    public proto.ClassSig.Centroid getCentroidWithInvoke() {
      return centroidWithInvoke_ == null ? proto.ClassSig.Centroid.getDefaultInstance() : centroidWithInvoke_;
    }
    /**
     * <code>.proto.Centroid centroid_with_invoke = 14;</code>
     */
    public proto.ClassSig.CentroidOrBuilder getCentroidWithInvokeOrBuilder() {
      return getCentroidWithInvoke();
    }

    public static final int BLOCKS_FIELD_NUMBER = 15;
    private java.util.List<proto.ClassSig.BasicBlockProto> blocks_;
    /**
     * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
     */
    public java.util.List<proto.ClassSig.BasicBlockProto> getBlocksList() {
      return blocks_;
    }
    /**
     * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
     */
    public java.util.List<? extends proto.ClassSig.BasicBlockProtoOrBuilder> 
        getBlocksOrBuilderList() {
      return blocks_;
    }
    /**
     * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
     */
    public int getBlocksCount() {
      return blocks_.size();
    }
    /**
     * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
     */
    public proto.ClassSig.BasicBlockProto getBlocks(int index) {
      return blocks_.get(index);
    }
    /**
     * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
     */
    public proto.ClassSig.BasicBlockProtoOrBuilder getBlocksOrBuilder(
        int index) {
      return blocks_.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 (!getClassNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, className_);
      }
      if (!getMethodNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, methodName_);
      }
      if (!getMethodSignatureBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, methodSignature_);
      }
      if (!getMethodSubsignatureBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, methodSubsignature_);
      }
      for (int i = 0; i < paramterTypes_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, paramterTypes_.getRaw(i));
      }
      if (!getReturnTypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, returnType_);
      }
      for (int i = 0; i < localTypes_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, localTypes_.getRaw(i));
      }
      for (int i = 0; i < stringConstants_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, stringConstants_.getRaw(i));
      }
      for (int i = 0; i < invokedMethodSignatures_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 9, invokedMethodSignatures_.getRaw(i));
      }
      for (int i = 0; i < resourceRefs_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 10, resourceRefs_.getRaw(i));
      }
      for (int i = 0; i < statements_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 11, statements_.getRaw(i));
      }
      if (!getModifiersBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 12, modifiers_);
      }
      if (centroid_ != null) {
        output.writeMessage(13, getCentroid());
      }
      if (centroidWithInvoke_ != null) {
        output.writeMessage(14, getCentroidWithInvoke());
      }
      for (int i = 0; i < blocks_.size(); i++) {
        output.writeMessage(15, blocks_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getClassNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, className_);
      }
      if (!getMethodNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, methodName_);
      }
      if (!getMethodSignatureBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, methodSignature_);
      }
      if (!getMethodSubsignatureBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, methodSubsignature_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < paramterTypes_.size(); i++) {
          dataSize += computeStringSizeNoTag(paramterTypes_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getParamterTypesList().size();
      }
      if (!getReturnTypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, returnType_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < localTypes_.size(); i++) {
          dataSize += computeStringSizeNoTag(localTypes_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getLocalTypesList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < stringConstants_.size(); i++) {
          dataSize += computeStringSizeNoTag(stringConstants_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getStringConstantsList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < invokedMethodSignatures_.size(); i++) {
          dataSize += computeStringSizeNoTag(invokedMethodSignatures_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getInvokedMethodSignaturesList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < resourceRefs_.size(); i++) {
          dataSize += computeStringSizeNoTag(resourceRefs_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getResourceRefsList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < statements_.size(); i++) {
          dataSize += computeStringSizeNoTag(statements_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getStatementsList().size();
      }
      if (!getModifiersBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, modifiers_);
      }
      if (centroid_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(13, getCentroid());
      }
      if (centroidWithInvoke_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, getCentroidWithInvoke());
      }
      for (int i = 0; i < blocks_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, blocks_.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.ClassSig.MethodAttributeProto)) {
        return super.equals(obj);
      }
      proto.ClassSig.MethodAttributeProto other = (proto.ClassSig.MethodAttributeProto) obj;

      boolean result = true;
      result = result && getClassName()
          .equals(other.getClassName());
      result = result && getMethodName()
          .equals(other.getMethodName());
      result = result && getMethodSignature()
          .equals(other.getMethodSignature());
      result = result && getMethodSubsignature()
          .equals(other.getMethodSubsignature());
      result = result && getParamterTypesList()
          .equals(other.getParamterTypesList());
      result = result && getReturnType()
          .equals(other.getReturnType());
      result = result && getLocalTypesList()
          .equals(other.getLocalTypesList());
      result = result && getStringConstantsList()
          .equals(other.getStringConstantsList());
      result = result && getInvokedMethodSignaturesList()
          .equals(other.getInvokedMethodSignaturesList());
      result = result && getResourceRefsList()
          .equals(other.getResourceRefsList());
      result = result && getStatementsList()
          .equals(other.getStatementsList());
      result = result && getModifiers()
          .equals(other.getModifiers());
      result = result && (hasCentroid() == other.hasCentroid());
      if (hasCentroid()) {
        result = result && getCentroid()
            .equals(other.getCentroid());
      }
      result = result && (hasCentroidWithInvoke() == other.hasCentroidWithInvoke());
      if (hasCentroidWithInvoke()) {
        result = result && getCentroidWithInvoke()
            .equals(other.getCentroidWithInvoke());
      }
      result = result && getBlocksList()
          .equals(other.getBlocksList());
      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) + CLASS_NAME_FIELD_NUMBER;
      hash = (53 * hash) + getClassName().hashCode();
      hash = (37 * hash) + METHOD_NAME_FIELD_NUMBER;
      hash = (53 * hash) + getMethodName().hashCode();
      hash = (37 * hash) + METHOD_SIGNATURE_FIELD_NUMBER;
      hash = (53 * hash) + getMethodSignature().hashCode();
      hash = (37 * hash) + METHOD_SUBSIGNATURE_FIELD_NUMBER;
      hash = (53 * hash) + getMethodSubsignature().hashCode();
      if (getParamterTypesCount() > 0) {
        hash = (37 * hash) + PARAMTER_TYPES_FIELD_NUMBER;
        hash = (53 * hash) + getParamterTypesList().hashCode();
      }
      hash = (37 * hash) + RETURN_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + getReturnType().hashCode();
      if (getLocalTypesCount() > 0) {
        hash = (37 * hash) + LOCAL_TYPES_FIELD_NUMBER;
        hash = (53 * hash) + getLocalTypesList().hashCode();
      }
      if (getStringConstantsCount() > 0) {
        hash = (37 * hash) + STRING_CONSTANTS_FIELD_NUMBER;
        hash = (53 * hash) + getStringConstantsList().hashCode();
      }
      if (getInvokedMethodSignaturesCount() > 0) {
        hash = (37 * hash) + INVOKED_METHOD_SIGNATURES_FIELD_NUMBER;
        hash = (53 * hash) + getInvokedMethodSignaturesList().hashCode();
      }
      if (getResourceRefsCount() > 0) {
        hash = (37 * hash) + RESOURCE_REFS_FIELD_NUMBER;
        hash = (53 * hash) + getResourceRefsList().hashCode();
      }
      if (getStatementsCount() > 0) {
        hash = (37 * hash) + STATEMENTS_FIELD_NUMBER;
        hash = (53 * hash) + getStatementsList().hashCode();
      }
      hash = (37 * hash) + MODIFIERS_FIELD_NUMBER;
      hash = (53 * hash) + getModifiers().hashCode();
      if (hasCentroid()) {
        hash = (37 * hash) + CENTROID_FIELD_NUMBER;
        hash = (53 * hash) + getCentroid().hashCode();
      }
      if (hasCentroidWithInvoke()) {
        hash = (37 * hash) + CENTROID_WITH_INVOKE_FIELD_NUMBER;
        hash = (53 * hash) + getCentroidWithInvoke().hashCode();
      }
      if (getBlocksCount() > 0) {
        hash = (37 * hash) + BLOCKS_FIELD_NUMBER;
        hash = (53 * hash) + getBlocksList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.ClassSig.MethodAttributeProto parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.MethodAttributeProto parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.MethodAttributeProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.MethodAttributeProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.MethodAttributeProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.MethodAttributeProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.MethodAttributeProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.MethodAttributeProto 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.ClassSig.MethodAttributeProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.ClassSig.MethodAttributeProto 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.ClassSig.MethodAttributeProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.MethodAttributeProto 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.ClassSig.MethodAttributeProto 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.MethodAttributeProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.MethodAttributeProto)
        proto.ClassSig.MethodAttributeProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.ClassSig.internal_static_proto_MethodAttributeProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.ClassSig.internal_static_proto_MethodAttributeProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.ClassSig.MethodAttributeProto.class, proto.ClassSig.MethodAttributeProto.Builder.class);
      }

      // Construct using proto.ClassSig.MethodAttributeProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

        methodName_ = "";

        methodSignature_ = "";

        methodSubsignature_ = "";

        paramterTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        returnType_ = "";

        localTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000040);
        stringConstants_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000080);
        invokedMethodSignatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        resourceRefs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000200);
        statements_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000400);
        modifiers_ = "";

        if (centroidBuilder_ == null) {
          centroid_ = null;
        } else {
          centroid_ = null;
          centroidBuilder_ = null;
        }
        if (centroidWithInvokeBuilder_ == null) {
          centroidWithInvoke_ = null;
        } else {
          centroidWithInvoke_ = null;
          centroidWithInvokeBuilder_ = null;
        }
        if (blocksBuilder_ == null) {
          blocks_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
        } else {
          blocksBuilder_.clear();
        }
        return this;
      }

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

      @java.lang.Override
      public proto.ClassSig.MethodAttributeProto getDefaultInstanceForType() {
        return proto.ClassSig.MethodAttributeProto.getDefaultInstance();
      }

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

      @java.lang.Override
      public proto.ClassSig.MethodAttributeProto buildPartial() {
        proto.ClassSig.MethodAttributeProto result = new proto.ClassSig.MethodAttributeProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.className_ = className_;
        result.methodName_ = methodName_;
        result.methodSignature_ = methodSignature_;
        result.methodSubsignature_ = methodSubsignature_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          paramterTypes_ = paramterTypes_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.paramterTypes_ = paramterTypes_;
        result.returnType_ = returnType_;
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          localTypes_ = localTypes_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000040);
        }
        result.localTypes_ = localTypes_;
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          stringConstants_ = stringConstants_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000080);
        }
        result.stringConstants_ = stringConstants_;
        if (((bitField0_ & 0x00000100) == 0x00000100)) {
          invokedMethodSignatures_ = invokedMethodSignatures_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000100);
        }
        result.invokedMethodSignatures_ = invokedMethodSignatures_;
        if (((bitField0_ & 0x00000200) == 0x00000200)) {
          resourceRefs_ = resourceRefs_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000200);
        }
        result.resourceRefs_ = resourceRefs_;
        if (((bitField0_ & 0x00000400) == 0x00000400)) {
          statements_ = statements_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000400);
        }
        result.statements_ = statements_;
        result.modifiers_ = modifiers_;
        if (centroidBuilder_ == null) {
          result.centroid_ = centroid_;
        } else {
          result.centroid_ = centroidBuilder_.build();
        }
        if (centroidWithInvokeBuilder_ == null) {
          result.centroidWithInvoke_ = centroidWithInvoke_;
        } else {
          result.centroidWithInvoke_ = centroidWithInvokeBuilder_.build();
        }
        if (blocksBuilder_ == null) {
          if (((bitField0_ & 0x00004000) == 0x00004000)) {
            blocks_ = java.util.Collections.unmodifiableList(blocks_);
            bitField0_ = (bitField0_ & ~0x00004000);
          }
          result.blocks_ = blocks_;
        } else {
          result.blocks_ = blocksBuilder_.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.ClassSig.MethodAttributeProto) {
          return mergeFrom((proto.ClassSig.MethodAttributeProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.ClassSig.MethodAttributeProto other) {
        if (other == proto.ClassSig.MethodAttributeProto.getDefaultInstance()) return this;
        if (!other.getClassName().isEmpty()) {
          className_ = other.className_;
          onChanged();
        }
        if (!other.getMethodName().isEmpty()) {
          methodName_ = other.methodName_;
          onChanged();
        }
        if (!other.getMethodSignature().isEmpty()) {
          methodSignature_ = other.methodSignature_;
          onChanged();
        }
        if (!other.getMethodSubsignature().isEmpty()) {
          methodSubsignature_ = other.methodSubsignature_;
          onChanged();
        }
        if (!other.paramterTypes_.isEmpty()) {
          if (paramterTypes_.isEmpty()) {
            paramterTypes_ = other.paramterTypes_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureParamterTypesIsMutable();
            paramterTypes_.addAll(other.paramterTypes_);
          }
          onChanged();
        }
        if (!other.getReturnType().isEmpty()) {
          returnType_ = other.returnType_;
          onChanged();
        }
        if (!other.localTypes_.isEmpty()) {
          if (localTypes_.isEmpty()) {
            localTypes_ = other.localTypes_;
            bitField0_ = (bitField0_ & ~0x00000040);
          } else {
            ensureLocalTypesIsMutable();
            localTypes_.addAll(other.localTypes_);
          }
          onChanged();
        }
        if (!other.stringConstants_.isEmpty()) {
          if (stringConstants_.isEmpty()) {
            stringConstants_ = other.stringConstants_;
            bitField0_ = (bitField0_ & ~0x00000080);
          } else {
            ensureStringConstantsIsMutable();
            stringConstants_.addAll(other.stringConstants_);
          }
          onChanged();
        }
        if (!other.invokedMethodSignatures_.isEmpty()) {
          if (invokedMethodSignatures_.isEmpty()) {
            invokedMethodSignatures_ = other.invokedMethodSignatures_;
            bitField0_ = (bitField0_ & ~0x00000100);
          } else {
            ensureInvokedMethodSignaturesIsMutable();
            invokedMethodSignatures_.addAll(other.invokedMethodSignatures_);
          }
          onChanged();
        }
        if (!other.resourceRefs_.isEmpty()) {
          if (resourceRefs_.isEmpty()) {
            resourceRefs_ = other.resourceRefs_;
            bitField0_ = (bitField0_ & ~0x00000200);
          } else {
            ensureResourceRefsIsMutable();
            resourceRefs_.addAll(other.resourceRefs_);
          }
          onChanged();
        }
        if (!other.statements_.isEmpty()) {
          if (statements_.isEmpty()) {
            statements_ = other.statements_;
            bitField0_ = (bitField0_ & ~0x00000400);
          } else {
            ensureStatementsIsMutable();
            statements_.addAll(other.statements_);
          }
          onChanged();
        }
        if (!other.getModifiers().isEmpty()) {
          modifiers_ = other.modifiers_;
          onChanged();
        }
        if (other.hasCentroid()) {
          mergeCentroid(other.getCentroid());
        }
        if (other.hasCentroidWithInvoke()) {
          mergeCentroidWithInvoke(other.getCentroidWithInvoke());
        }
        if (blocksBuilder_ == null) {
          if (!other.blocks_.isEmpty()) {
            if (blocks_.isEmpty()) {
              blocks_ = other.blocks_;
              bitField0_ = (bitField0_ & ~0x00004000);
            } else {
              ensureBlocksIsMutable();
              blocks_.addAll(other.blocks_);
            }
            onChanged();
          }
        } else {
          if (!other.blocks_.isEmpty()) {
            if (blocksBuilder_.isEmpty()) {
              blocksBuilder_.dispose();
              blocksBuilder_ = null;
              blocks_ = other.blocks_;
              bitField0_ = (bitField0_ & ~0x00004000);
              blocksBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getBlocksFieldBuilder() : null;
            } else {
              blocksBuilder_.addAllMessages(other.blocks_);
            }
          }
        }
        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.ClassSig.MethodAttributeProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.ClassSig.MethodAttributeProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object className_ = "";
      /**
       * <code>string class_name = 1;</code>
       */
      public java.lang.String getClassName() {
        java.lang.Object ref = className_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          className_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string class_name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getClassNameBytes() {
        java.lang.Object ref = className_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          className_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string class_name = 1;</code>
       */
      public Builder setClassName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        className_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string class_name = 1;</code>
       */
      public Builder clearClassName() {
        
        className_ = getDefaultInstance().getClassName();
        onChanged();
        return this;
      }
      /**
       * <code>string class_name = 1;</code>
       */
      public Builder setClassNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        className_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object methodName_ = "";
      /**
       * <code>string method_name = 2;</code>
       */
      public java.lang.String getMethodName() {
        java.lang.Object ref = methodName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          methodName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string method_name = 2;</code>
       */
      public com.google.protobuf.ByteString
          getMethodNameBytes() {
        java.lang.Object ref = methodName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          methodName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string method_name = 2;</code>
       */
      public Builder setMethodName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        methodName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string method_name = 2;</code>
       */
      public Builder clearMethodName() {
        
        methodName_ = getDefaultInstance().getMethodName();
        onChanged();
        return this;
      }
      /**
       * <code>string method_name = 2;</code>
       */
      public Builder setMethodNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        methodName_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object methodSignature_ = "";
      /**
       * <code>string method_signature = 3;</code>
       */
      public java.lang.String getMethodSignature() {
        java.lang.Object ref = methodSignature_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          methodSignature_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string method_signature = 3;</code>
       */
      public com.google.protobuf.ByteString
          getMethodSignatureBytes() {
        java.lang.Object ref = methodSignature_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          methodSignature_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string method_signature = 3;</code>
       */
      public Builder setMethodSignature(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        methodSignature_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string method_signature = 3;</code>
       */
      public Builder clearMethodSignature() {
        
        methodSignature_ = getDefaultInstance().getMethodSignature();
        onChanged();
        return this;
      }
      /**
       * <code>string method_signature = 3;</code>
       */
      public Builder setMethodSignatureBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        methodSignature_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object methodSubsignature_ = "";
      /**
       * <code>string method_subsignature = 4;</code>
       */
      public java.lang.String getMethodSubsignature() {
        java.lang.Object ref = methodSubsignature_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          methodSubsignature_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string method_subsignature = 4;</code>
       */
      public com.google.protobuf.ByteString
          getMethodSubsignatureBytes() {
        java.lang.Object ref = methodSubsignature_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          methodSubsignature_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string method_subsignature = 4;</code>
       */
      public Builder setMethodSubsignature(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        methodSubsignature_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string method_subsignature = 4;</code>
       */
      public Builder clearMethodSubsignature() {
        
        methodSubsignature_ = getDefaultInstance().getMethodSubsignature();
        onChanged();
        return this;
      }
      /**
       * <code>string method_subsignature = 4;</code>
       */
      public Builder setMethodSubsignatureBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        methodSubsignature_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList paramterTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureParamterTypesIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          paramterTypes_ = new com.google.protobuf.LazyStringArrayList(paramterTypes_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <code>repeated string paramter_types = 5;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getParamterTypesList() {
        return paramterTypes_.getUnmodifiableView();
      }
      /**
       * <code>repeated string paramter_types = 5;</code>
       */
      public int getParamterTypesCount() {
        return paramterTypes_.size();
      }
      /**
       * <code>repeated string paramter_types = 5;</code>
       */
      public java.lang.String getParamterTypes(int index) {
        return paramterTypes_.get(index);
      }
      /**
       * <code>repeated string paramter_types = 5;</code>
       */
      public com.google.protobuf.ByteString
          getParamterTypesBytes(int index) {
        return paramterTypes_.getByteString(index);
      }
      /**
       * <code>repeated string paramter_types = 5;</code>
       */
      public Builder setParamterTypes(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureParamterTypesIsMutable();
        paramterTypes_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string paramter_types = 5;</code>
       */
      public Builder addParamterTypes(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureParamterTypesIsMutable();
        paramterTypes_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string paramter_types = 5;</code>
       */
      public Builder addAllParamterTypes(
          java.lang.Iterable<java.lang.String> values) {
        ensureParamterTypesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, paramterTypes_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string paramter_types = 5;</code>
       */
      public Builder clearParamterTypes() {
        paramterTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string paramter_types = 5;</code>
       */
      public Builder addParamterTypesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureParamterTypesIsMutable();
        paramterTypes_.add(value);
        onChanged();
        return this;
      }

      private java.lang.Object returnType_ = "";
      /**
       * <code>string return_type = 6;</code>
       */
      public java.lang.String getReturnType() {
        java.lang.Object ref = returnType_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          returnType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string return_type = 6;</code>
       */
      public com.google.protobuf.ByteString
          getReturnTypeBytes() {
        java.lang.Object ref = returnType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          returnType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string return_type = 6;</code>
       */
      public Builder setReturnType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        returnType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string return_type = 6;</code>
       */
      public Builder clearReturnType() {
        
        returnType_ = getDefaultInstance().getReturnType();
        onChanged();
        return this;
      }
      /**
       * <code>string return_type = 6;</code>
       */
      public Builder setReturnTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        returnType_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList localTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureLocalTypesIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          localTypes_ = new com.google.protobuf.LazyStringArrayList(localTypes_);
          bitField0_ |= 0x00000040;
         }
      }
      /**
       * <code>repeated string local_types = 7;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getLocalTypesList() {
        return localTypes_.getUnmodifiableView();
      }
      /**
       * <code>repeated string local_types = 7;</code>
       */
      public int getLocalTypesCount() {
        return localTypes_.size();
      }
      /**
       * <code>repeated string local_types = 7;</code>
       */
      public java.lang.String getLocalTypes(int index) {
        return localTypes_.get(index);
      }
      /**
       * <code>repeated string local_types = 7;</code>
       */
      public com.google.protobuf.ByteString
          getLocalTypesBytes(int index) {
        return localTypes_.getByteString(index);
      }
      /**
       * <code>repeated string local_types = 7;</code>
       */
      public Builder setLocalTypes(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLocalTypesIsMutable();
        localTypes_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string local_types = 7;</code>
       */
      public Builder addLocalTypes(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLocalTypesIsMutable();
        localTypes_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string local_types = 7;</code>
       */
      public Builder addAllLocalTypes(
          java.lang.Iterable<java.lang.String> values) {
        ensureLocalTypesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, localTypes_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string local_types = 7;</code>
       */
      public Builder clearLocalTypes() {
        localTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000040);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string local_types = 7;</code>
       */
      public Builder addLocalTypesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureLocalTypesIsMutable();
        localTypes_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList stringConstants_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureStringConstantsIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          stringConstants_ = new com.google.protobuf.LazyStringArrayList(stringConstants_);
          bitField0_ |= 0x00000080;
         }
      }
      /**
       * <code>repeated string string_constants = 8;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getStringConstantsList() {
        return stringConstants_.getUnmodifiableView();
      }
      /**
       * <code>repeated string string_constants = 8;</code>
       */
      public int getStringConstantsCount() {
        return stringConstants_.size();
      }
      /**
       * <code>repeated string string_constants = 8;</code>
       */
      public java.lang.String getStringConstants(int index) {
        return stringConstants_.get(index);
      }
      /**
       * <code>repeated string string_constants = 8;</code>
       */
      public com.google.protobuf.ByteString
          getStringConstantsBytes(int index) {
        return stringConstants_.getByteString(index);
      }
      /**
       * <code>repeated string string_constants = 8;</code>
       */
      public Builder setStringConstants(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureStringConstantsIsMutable();
        stringConstants_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string string_constants = 8;</code>
       */
      public Builder addStringConstants(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureStringConstantsIsMutable();
        stringConstants_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string string_constants = 8;</code>
       */
      public Builder addAllStringConstants(
          java.lang.Iterable<java.lang.String> values) {
        ensureStringConstantsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, stringConstants_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string string_constants = 8;</code>
       */
      public Builder clearStringConstants() {
        stringConstants_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string string_constants = 8;</code>
       */
      public Builder addStringConstantsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureStringConstantsIsMutable();
        stringConstants_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList invokedMethodSignatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureInvokedMethodSignaturesIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          invokedMethodSignatures_ = new com.google.protobuf.LazyStringArrayList(invokedMethodSignatures_);
          bitField0_ |= 0x00000100;
         }
      }
      /**
       * <pre>
       * The methods that this method invokes, specially we want to check if it is a API method
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 9;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getInvokedMethodSignaturesList() {
        return invokedMethodSignatures_.getUnmodifiableView();
      }
      /**
       * <pre>
       * The methods that this method invokes, specially we want to check if it is a API method
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 9;</code>
       */
      public int getInvokedMethodSignaturesCount() {
        return invokedMethodSignatures_.size();
      }
      /**
       * <pre>
       * The methods that this method invokes, specially we want to check if it is a API method
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 9;</code>
       */
      public java.lang.String getInvokedMethodSignatures(int index) {
        return invokedMethodSignatures_.get(index);
      }
      /**
       * <pre>
       * The methods that this method invokes, specially we want to check if it is a API method
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 9;</code>
       */
      public com.google.protobuf.ByteString
          getInvokedMethodSignaturesBytes(int index) {
        return invokedMethodSignatures_.getByteString(index);
      }
      /**
       * <pre>
       * The methods that this method invokes, specially we want to check if it is a API method
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 9;</code>
       */
      public Builder setInvokedMethodSignatures(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureInvokedMethodSignaturesIsMutable();
        invokedMethodSignatures_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The methods that this method invokes, specially we want to check if it is a API method
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 9;</code>
       */
      public Builder addInvokedMethodSignatures(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureInvokedMethodSignaturesIsMutable();
        invokedMethodSignatures_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The methods that this method invokes, specially we want to check if it is a API method
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 9;</code>
       */
      public Builder addAllInvokedMethodSignatures(
          java.lang.Iterable<java.lang.String> values) {
        ensureInvokedMethodSignaturesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, invokedMethodSignatures_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The methods that this method invokes, specially we want to check if it is a API method
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 9;</code>
       */
      public Builder clearInvokedMethodSignatures() {
        invokedMethodSignatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The methods that this method invokes, specially we want to check if it is a API method
       * </pre>
       *
       * <code>repeated string invoked_method_signatures = 9;</code>
       */
      public Builder addInvokedMethodSignaturesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureInvokedMethodSignaturesIsMutable();
        invokedMethodSignatures_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList resourceRefs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureResourceRefsIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          resourceRefs_ = new com.google.protobuf.LazyStringArrayList(resourceRefs_);
          bitField0_ |= 0x00000200;
         }
      }
      /**
       * <code>repeated string resource_refs = 10;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getResourceRefsList() {
        return resourceRefs_.getUnmodifiableView();
      }
      /**
       * <code>repeated string resource_refs = 10;</code>
       */
      public int getResourceRefsCount() {
        return resourceRefs_.size();
      }
      /**
       * <code>repeated string resource_refs = 10;</code>
       */
      public java.lang.String getResourceRefs(int index) {
        return resourceRefs_.get(index);
      }
      /**
       * <code>repeated string resource_refs = 10;</code>
       */
      public com.google.protobuf.ByteString
          getResourceRefsBytes(int index) {
        return resourceRefs_.getByteString(index);
      }
      /**
       * <code>repeated string resource_refs = 10;</code>
       */
      public Builder setResourceRefs(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureResourceRefsIsMutable();
        resourceRefs_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string resource_refs = 10;</code>
       */
      public Builder addResourceRefs(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureResourceRefsIsMutable();
        resourceRefs_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string resource_refs = 10;</code>
       */
      public Builder addAllResourceRefs(
          java.lang.Iterable<java.lang.String> values) {
        ensureResourceRefsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, resourceRefs_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string resource_refs = 10;</code>
       */
      public Builder clearResourceRefs() {
        resourceRefs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000200);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string resource_refs = 10;</code>
       */
      public Builder addResourceRefsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureResourceRefsIsMutable();
        resourceRefs_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList statements_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureStatementsIsMutable() {
        if (!((bitField0_ & 0x00000400) == 0x00000400)) {
          statements_ = new com.google.protobuf.LazyStringArrayList(statements_);
          bitField0_ |= 0x00000400;
         }
      }
      /**
       * <code>repeated string statements = 11;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getStatementsList() {
        return statements_.getUnmodifiableView();
      }
      /**
       * <code>repeated string statements = 11;</code>
       */
      public int getStatementsCount() {
        return statements_.size();
      }
      /**
       * <code>repeated string statements = 11;</code>
       */
      public java.lang.String getStatements(int index) {
        return statements_.get(index);
      }
      /**
       * <code>repeated string statements = 11;</code>
       */
      public com.google.protobuf.ByteString
          getStatementsBytes(int index) {
        return statements_.getByteString(index);
      }
      /**
       * <code>repeated string statements = 11;</code>
       */
      public Builder setStatements(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureStatementsIsMutable();
        statements_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string statements = 11;</code>
       */
      public Builder addStatements(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureStatementsIsMutable();
        statements_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string statements = 11;</code>
       */
      public Builder addAllStatements(
          java.lang.Iterable<java.lang.String> values) {
        ensureStatementsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, statements_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string statements = 11;</code>
       */
      public Builder clearStatements() {
        statements_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000400);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string statements = 11;</code>
       */
      public Builder addStatementsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureStatementsIsMutable();
        statements_.add(value);
        onChanged();
        return this;
      }

      private java.lang.Object modifiers_ = "";
      /**
       * <code>string modifiers = 12;</code>
       */
      public java.lang.String getModifiers() {
        java.lang.Object ref = modifiers_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          modifiers_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string modifiers = 12;</code>
       */
      public com.google.protobuf.ByteString
          getModifiersBytes() {
        java.lang.Object ref = modifiers_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          modifiers_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string modifiers = 12;</code>
       */
      public Builder setModifiers(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        modifiers_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string modifiers = 12;</code>
       */
      public Builder clearModifiers() {
        
        modifiers_ = getDefaultInstance().getModifiers();
        onChanged();
        return this;
      }
      /**
       * <code>string modifiers = 12;</code>
       */
      public Builder setModifiersBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        modifiers_ = value;
        onChanged();
        return this;
      }

      private proto.ClassSig.Centroid centroid_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.ClassSig.Centroid, proto.ClassSig.Centroid.Builder, proto.ClassSig.CentroidOrBuilder> centroidBuilder_;
      /**
       * <code>.proto.Centroid centroid = 13;</code>
       */
      public boolean hasCentroid() {
        return centroidBuilder_ != null || centroid_ != null;
      }
      /**
       * <code>.proto.Centroid centroid = 13;</code>
       */
      public proto.ClassSig.Centroid getCentroid() {
        if (centroidBuilder_ == null) {
          return centroid_ == null ? proto.ClassSig.Centroid.getDefaultInstance() : centroid_;
        } else {
          return centroidBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.Centroid centroid = 13;</code>
       */
      public Builder setCentroid(proto.ClassSig.Centroid value) {
        if (centroidBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          centroid_ = value;
          onChanged();
        } else {
          centroidBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.Centroid centroid = 13;</code>
       */
      public Builder setCentroid(
          proto.ClassSig.Centroid.Builder builderForValue) {
        if (centroidBuilder_ == null) {
          centroid_ = builderForValue.build();
          onChanged();
        } else {
          centroidBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.Centroid centroid = 13;</code>
       */
      public Builder mergeCentroid(proto.ClassSig.Centroid value) {
        if (centroidBuilder_ == null) {
          if (centroid_ != null) {
            centroid_ =
              proto.ClassSig.Centroid.newBuilder(centroid_).mergeFrom(value).buildPartial();
          } else {
            centroid_ = value;
          }
          onChanged();
        } else {
          centroidBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.Centroid centroid = 13;</code>
       */
      public Builder clearCentroid() {
        if (centroidBuilder_ == null) {
          centroid_ = null;
          onChanged();
        } else {
          centroid_ = null;
          centroidBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.Centroid centroid = 13;</code>
       */
      public proto.ClassSig.Centroid.Builder getCentroidBuilder() {
        
        onChanged();
        return getCentroidFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.Centroid centroid = 13;</code>
       */
      public proto.ClassSig.CentroidOrBuilder getCentroidOrBuilder() {
        if (centroidBuilder_ != null) {
          return centroidBuilder_.getMessageOrBuilder();
        } else {
          return centroid_ == null ?
              proto.ClassSig.Centroid.getDefaultInstance() : centroid_;
        }
      }
      /**
       * <code>.proto.Centroid centroid = 13;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.ClassSig.Centroid, proto.ClassSig.Centroid.Builder, proto.ClassSig.CentroidOrBuilder> 
          getCentroidFieldBuilder() {
        if (centroidBuilder_ == null) {
          centroidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.ClassSig.Centroid, proto.ClassSig.Centroid.Builder, proto.ClassSig.CentroidOrBuilder>(
                  getCentroid(),
                  getParentForChildren(),
                  isClean());
          centroid_ = null;
        }
        return centroidBuilder_;
      }

      private proto.ClassSig.Centroid centroidWithInvoke_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.ClassSig.Centroid, proto.ClassSig.Centroid.Builder, proto.ClassSig.CentroidOrBuilder> centroidWithInvokeBuilder_;
      /**
       * <code>.proto.Centroid centroid_with_invoke = 14;</code>
       */
      public boolean hasCentroidWithInvoke() {
        return centroidWithInvokeBuilder_ != null || centroidWithInvoke_ != null;
      }
      /**
       * <code>.proto.Centroid centroid_with_invoke = 14;</code>
       */
      public proto.ClassSig.Centroid getCentroidWithInvoke() {
        if (centroidWithInvokeBuilder_ == null) {
          return centroidWithInvoke_ == null ? proto.ClassSig.Centroid.getDefaultInstance() : centroidWithInvoke_;
        } else {
          return centroidWithInvokeBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.Centroid centroid_with_invoke = 14;</code>
       */
      public Builder setCentroidWithInvoke(proto.ClassSig.Centroid value) {
        if (centroidWithInvokeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          centroidWithInvoke_ = value;
          onChanged();
        } else {
          centroidWithInvokeBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.Centroid centroid_with_invoke = 14;</code>
       */
      public Builder setCentroidWithInvoke(
          proto.ClassSig.Centroid.Builder builderForValue) {
        if (centroidWithInvokeBuilder_ == null) {
          centroidWithInvoke_ = builderForValue.build();
          onChanged();
        } else {
          centroidWithInvokeBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.Centroid centroid_with_invoke = 14;</code>
       */
      public Builder mergeCentroidWithInvoke(proto.ClassSig.Centroid value) {
        if (centroidWithInvokeBuilder_ == null) {
          if (centroidWithInvoke_ != null) {
            centroidWithInvoke_ =
              proto.ClassSig.Centroid.newBuilder(centroidWithInvoke_).mergeFrom(value).buildPartial();
          } else {
            centroidWithInvoke_ = value;
          }
          onChanged();
        } else {
          centroidWithInvokeBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.Centroid centroid_with_invoke = 14;</code>
       */
      public Builder clearCentroidWithInvoke() {
        if (centroidWithInvokeBuilder_ == null) {
          centroidWithInvoke_ = null;
          onChanged();
        } else {
          centroidWithInvoke_ = null;
          centroidWithInvokeBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.Centroid centroid_with_invoke = 14;</code>
       */
      public proto.ClassSig.Centroid.Builder getCentroidWithInvokeBuilder() {
        
        onChanged();
        return getCentroidWithInvokeFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.Centroid centroid_with_invoke = 14;</code>
       */
      public proto.ClassSig.CentroidOrBuilder getCentroidWithInvokeOrBuilder() {
        if (centroidWithInvokeBuilder_ != null) {
          return centroidWithInvokeBuilder_.getMessageOrBuilder();
        } else {
          return centroidWithInvoke_ == null ?
              proto.ClassSig.Centroid.getDefaultInstance() : centroidWithInvoke_;
        }
      }
      /**
       * <code>.proto.Centroid centroid_with_invoke = 14;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.ClassSig.Centroid, proto.ClassSig.Centroid.Builder, proto.ClassSig.CentroidOrBuilder> 
          getCentroidWithInvokeFieldBuilder() {
        if (centroidWithInvokeBuilder_ == null) {
          centroidWithInvokeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.ClassSig.Centroid, proto.ClassSig.Centroid.Builder, proto.ClassSig.CentroidOrBuilder>(
                  getCentroidWithInvoke(),
                  getParentForChildren(),
                  isClean());
          centroidWithInvoke_ = null;
        }
        return centroidWithInvokeBuilder_;
      }

      private java.util.List<proto.ClassSig.BasicBlockProto> blocks_ =
        java.util.Collections.emptyList();
      private void ensureBlocksIsMutable() {
        if (!((bitField0_ & 0x00004000) == 0x00004000)) {
          blocks_ = new java.util.ArrayList<proto.ClassSig.BasicBlockProto>(blocks_);
          bitField0_ |= 0x00004000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.BasicBlockProto, proto.ClassSig.BasicBlockProto.Builder, proto.ClassSig.BasicBlockProtoOrBuilder> blocksBuilder_;

      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public java.util.List<proto.ClassSig.BasicBlockProto> getBlocksList() {
        if (blocksBuilder_ == null) {
          return java.util.Collections.unmodifiableList(blocks_);
        } else {
          return blocksBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public int getBlocksCount() {
        if (blocksBuilder_ == null) {
          return blocks_.size();
        } else {
          return blocksBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public proto.ClassSig.BasicBlockProto getBlocks(int index) {
        if (blocksBuilder_ == null) {
          return blocks_.get(index);
        } else {
          return blocksBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public Builder setBlocks(
          int index, proto.ClassSig.BasicBlockProto value) {
        if (blocksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBlocksIsMutable();
          blocks_.set(index, value);
          onChanged();
        } else {
          blocksBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public Builder setBlocks(
          int index, proto.ClassSig.BasicBlockProto.Builder builderForValue) {
        if (blocksBuilder_ == null) {
          ensureBlocksIsMutable();
          blocks_.set(index, builderForValue.build());
          onChanged();
        } else {
          blocksBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public Builder addBlocks(proto.ClassSig.BasicBlockProto value) {
        if (blocksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBlocksIsMutable();
          blocks_.add(value);
          onChanged();
        } else {
          blocksBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public Builder addBlocks(
          int index, proto.ClassSig.BasicBlockProto value) {
        if (blocksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBlocksIsMutable();
          blocks_.add(index, value);
          onChanged();
        } else {
          blocksBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public Builder addBlocks(
          proto.ClassSig.BasicBlockProto.Builder builderForValue) {
        if (blocksBuilder_ == null) {
          ensureBlocksIsMutable();
          blocks_.add(builderForValue.build());
          onChanged();
        } else {
          blocksBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public Builder addBlocks(
          int index, proto.ClassSig.BasicBlockProto.Builder builderForValue) {
        if (blocksBuilder_ == null) {
          ensureBlocksIsMutable();
          blocks_.add(index, builderForValue.build());
          onChanged();
        } else {
          blocksBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public Builder addAllBlocks(
          java.lang.Iterable<? extends proto.ClassSig.BasicBlockProto> values) {
        if (blocksBuilder_ == null) {
          ensureBlocksIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, blocks_);
          onChanged();
        } else {
          blocksBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public Builder clearBlocks() {
        if (blocksBuilder_ == null) {
          blocks_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
          onChanged();
        } else {
          blocksBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public Builder removeBlocks(int index) {
        if (blocksBuilder_ == null) {
          ensureBlocksIsMutable();
          blocks_.remove(index);
          onChanged();
        } else {
          blocksBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public proto.ClassSig.BasicBlockProto.Builder getBlocksBuilder(
          int index) {
        return getBlocksFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public proto.ClassSig.BasicBlockProtoOrBuilder getBlocksOrBuilder(
          int index) {
        if (blocksBuilder_ == null) {
          return blocks_.get(index);  } else {
          return blocksBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public java.util.List<? extends proto.ClassSig.BasicBlockProtoOrBuilder> 
           getBlocksOrBuilderList() {
        if (blocksBuilder_ != null) {
          return blocksBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(blocks_);
        }
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public proto.ClassSig.BasicBlockProto.Builder addBlocksBuilder() {
        return getBlocksFieldBuilder().addBuilder(
            proto.ClassSig.BasicBlockProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public proto.ClassSig.BasicBlockProto.Builder addBlocksBuilder(
          int index) {
        return getBlocksFieldBuilder().addBuilder(
            index, proto.ClassSig.BasicBlockProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.BasicBlockProto blocks = 15;</code>
       */
      public java.util.List<proto.ClassSig.BasicBlockProto.Builder> 
           getBlocksBuilderList() {
        return getBlocksFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.BasicBlockProto, proto.ClassSig.BasicBlockProto.Builder, proto.ClassSig.BasicBlockProtoOrBuilder> 
          getBlocksFieldBuilder() {
        if (blocksBuilder_ == null) {
          blocksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.ClassSig.BasicBlockProto, proto.ClassSig.BasicBlockProto.Builder, proto.ClassSig.BasicBlockProtoOrBuilder>(
                  blocks_,
                  ((bitField0_ & 0x00004000) == 0x00004000),
                  getParentForChildren(),
                  isClean());
          blocks_ = null;
        }
        return blocksBuilder_;
      }
      @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.MethodAttributeProto)
    }

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

    public static proto.ClassSig.MethodAttributeProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.ClassSig.MethodAttributeProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

    /**
     * <code>string class_name = 1;</code>
     */
    java.lang.String getClassName();
    /**
     * <code>string class_name = 1;</code>
     */
    com.google.protobuf.ByteString
        getClassNameBytes();

    /**
     * <code>string super_class_name = 2;</code>
     */
    java.lang.String getSuperClassName();
    /**
     * <code>string super_class_name = 2;</code>
     */
    com.google.protobuf.ByteString
        getSuperClassNameBytes();

    /**
     * <code>repeated string interface_class_names = 3;</code>
     */
    java.util.List<java.lang.String>
        getInterfaceClassNamesList();
    /**
     * <code>repeated string interface_class_names = 3;</code>
     */
    int getInterfaceClassNamesCount();
    /**
     * <code>repeated string interface_class_names = 3;</code>
     */
    java.lang.String getInterfaceClassNames(int index);
    /**
     * <code>repeated string interface_class_names = 3;</code>
     */
    com.google.protobuf.ByteString
        getInterfaceClassNamesBytes(int index);

    /**
     * <code>string package_name = 4;</code>
     */
    java.lang.String getPackageName();
    /**
     * <code>string package_name = 4;</code>
     */
    com.google.protobuf.ByteString
        getPackageNameBytes();

    /**
     * <code>bool is_entry_point = 5;</code>
     */
    boolean getIsEntryPoint();

    /**
     * <code>repeated string static_field_strings = 6;</code>
     */
    java.util.List<java.lang.String>
        getStaticFieldStringsList();
    /**
     * <code>repeated string static_field_strings = 6;</code>
     */
    int getStaticFieldStringsCount();
    /**
     * <code>repeated string static_field_strings = 6;</code>
     */
    java.lang.String getStaticFieldStrings(int index);
    /**
     * <code>repeated string static_field_strings = 6;</code>
     */
    com.google.protobuf.ByteString
        getStaticFieldStringsBytes(int index);

    /**
     * <code>repeated string instance_field_strings = 7;</code>
     */
    java.util.List<java.lang.String>
        getInstanceFieldStringsList();
    /**
     * <code>repeated string instance_field_strings = 7;</code>
     */
    int getInstanceFieldStringsCount();
    /**
     * <code>repeated string instance_field_strings = 7;</code>
     */
    java.lang.String getInstanceFieldStrings(int index);
    /**
     * <code>repeated string instance_field_strings = 7;</code>
     */
    com.google.protobuf.ByteString
        getInstanceFieldStringsBytes(int index);

    /**
     * <code>repeated string permission_strings = 8;</code>
     */
    java.util.List<java.lang.String>
        getPermissionStringsList();
    /**
     * <code>repeated string permission_strings = 8;</code>
     */
    int getPermissionStringsCount();
    /**
     * <code>repeated string permission_strings = 8;</code>
     */
    java.lang.String getPermissionStrings(int index);
    /**
     * <code>repeated string permission_strings = 8;</code>
     */
    com.google.protobuf.ByteString
        getPermissionStringsBytes(int index);

    /**
     * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
     */
    java.util.List<proto.ClassSig.MethodAttributeProto> 
        getMethodsList();
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
     */
    proto.ClassSig.MethodAttributeProto getMethods(int index);
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
     */
    int getMethodsCount();
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
     */
    java.util.List<? extends proto.ClassSig.MethodAttributeProtoOrBuilder> 
        getMethodsOrBuilderList();
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
     */
    proto.ClassSig.MethodAttributeProtoOrBuilder getMethodsOrBuilder(
        int index);

    /**
     * <code>string outer_class_name = 10;</code>
     */
    java.lang.String getOuterClassName();
    /**
     * <code>string outer_class_name = 10;</code>
     */
    com.google.protobuf.ByteString
        getOuterClassNameBytes();

    /**
     * <code>string modifiers = 11;</code>
     */
    java.lang.String getModifiers();
    /**
     * <code>string modifiers = 11;</code>
     */
    com.google.protobuf.ByteString
        getModifiersBytes();
  }
  /**
   * Protobuf type {@code proto.ClassAttributeProto}
   */
  public  static final class ClassAttributeProto extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.ClassAttributeProto)
      ClassAttributeProtoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ClassAttributeProto.newBuilder() to construct.
    private ClassAttributeProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ClassAttributeProto() {
      className_ = "";
      superClassName_ = "";
      interfaceClassNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      packageName_ = "";
      isEntryPoint_ = false;
      staticFieldStrings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      instanceFieldStrings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      permissionStrings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      methods_ = java.util.Collections.emptyList();
      outerClassName_ = "";
      modifiers_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ClassAttributeProto(
        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();

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

              superClassName_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                interfaceClassNames_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000004;
              }
              interfaceClassNames_.add(s);
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              packageName_ = s;
              break;
            }
            case 40: {

              isEntryPoint_ = input.readBool();
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                staticFieldStrings_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000020;
              }
              staticFieldStrings_.add(s);
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                instanceFieldStrings_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000040;
              }
              instanceFieldStrings_.add(s);
              break;
            }
            case 66: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                permissionStrings_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000080;
              }
              permissionStrings_.add(s);
              break;
            }
            case 74: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                methods_ = new java.util.ArrayList<proto.ClassSig.MethodAttributeProto>();
                mutable_bitField0_ |= 0x00000100;
              }
              methods_.add(
                  input.readMessage(proto.ClassSig.MethodAttributeProto.parser(), extensionRegistry));
              break;
            }
            case 82: {
              java.lang.String s = input.readStringRequireUtf8();

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

              modifiers_ = 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 {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          interfaceClassNames_ = interfaceClassNames_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          staticFieldStrings_ = staticFieldStrings_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          instanceFieldStrings_ = instanceFieldStrings_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
          permissionStrings_ = permissionStrings_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          methods_ = java.util.Collections.unmodifiableList(methods_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.ClassSig.internal_static_proto_ClassAttributeProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.ClassSig.internal_static_proto_ClassAttributeProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.ClassSig.ClassAttributeProto.class, proto.ClassSig.ClassAttributeProto.Builder.class);
    }

    private int bitField0_;
    public static final int CLASS_NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object className_;
    /**
     * <code>string class_name = 1;</code>
     */
    public java.lang.String getClassName() {
      java.lang.Object ref = className_;
      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();
        className_ = s;
        return s;
      }
    }
    /**
     * <code>string class_name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getClassNameBytes() {
      java.lang.Object ref = className_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        className_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SUPER_CLASS_NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object superClassName_;
    /**
     * <code>string super_class_name = 2;</code>
     */
    public java.lang.String getSuperClassName() {
      java.lang.Object ref = superClassName_;
      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();
        superClassName_ = s;
        return s;
      }
    }
    /**
     * <code>string super_class_name = 2;</code>
     */
    public com.google.protobuf.ByteString
        getSuperClassNameBytes() {
      java.lang.Object ref = superClassName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        superClassName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int INTERFACE_CLASS_NAMES_FIELD_NUMBER = 3;
    private com.google.protobuf.LazyStringList interfaceClassNames_;
    /**
     * <code>repeated string interface_class_names = 3;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getInterfaceClassNamesList() {
      return interfaceClassNames_;
    }
    /**
     * <code>repeated string interface_class_names = 3;</code>
     */
    public int getInterfaceClassNamesCount() {
      return interfaceClassNames_.size();
    }
    /**
     * <code>repeated string interface_class_names = 3;</code>
     */
    public java.lang.String getInterfaceClassNames(int index) {
      return interfaceClassNames_.get(index);
    }
    /**
     * <code>repeated string interface_class_names = 3;</code>
     */
    public com.google.protobuf.ByteString
        getInterfaceClassNamesBytes(int index) {
      return interfaceClassNames_.getByteString(index);
    }

    public static final int PACKAGE_NAME_FIELD_NUMBER = 4;
    private volatile java.lang.Object packageName_;
    /**
     * <code>string package_name = 4;</code>
     */
    public java.lang.String getPackageName() {
      java.lang.Object ref = packageName_;
      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();
        packageName_ = s;
        return s;
      }
    }
    /**
     * <code>string package_name = 4;</code>
     */
    public com.google.protobuf.ByteString
        getPackageNameBytes() {
      java.lang.Object ref = packageName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        packageName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int IS_ENTRY_POINT_FIELD_NUMBER = 5;
    private boolean isEntryPoint_;
    /**
     * <code>bool is_entry_point = 5;</code>
     */
    public boolean getIsEntryPoint() {
      return isEntryPoint_;
    }

    public static final int STATIC_FIELD_STRINGS_FIELD_NUMBER = 6;
    private com.google.protobuf.LazyStringList staticFieldStrings_;
    /**
     * <code>repeated string static_field_strings = 6;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getStaticFieldStringsList() {
      return staticFieldStrings_;
    }
    /**
     * <code>repeated string static_field_strings = 6;</code>
     */
    public int getStaticFieldStringsCount() {
      return staticFieldStrings_.size();
    }
    /**
     * <code>repeated string static_field_strings = 6;</code>
     */
    public java.lang.String getStaticFieldStrings(int index) {
      return staticFieldStrings_.get(index);
    }
    /**
     * <code>repeated string static_field_strings = 6;</code>
     */
    public com.google.protobuf.ByteString
        getStaticFieldStringsBytes(int index) {
      return staticFieldStrings_.getByteString(index);
    }

    public static final int INSTANCE_FIELD_STRINGS_FIELD_NUMBER = 7;
    private com.google.protobuf.LazyStringList instanceFieldStrings_;
    /**
     * <code>repeated string instance_field_strings = 7;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getInstanceFieldStringsList() {
      return instanceFieldStrings_;
    }
    /**
     * <code>repeated string instance_field_strings = 7;</code>
     */
    public int getInstanceFieldStringsCount() {
      return instanceFieldStrings_.size();
    }
    /**
     * <code>repeated string instance_field_strings = 7;</code>
     */
    public java.lang.String getInstanceFieldStrings(int index) {
      return instanceFieldStrings_.get(index);
    }
    /**
     * <code>repeated string instance_field_strings = 7;</code>
     */
    public com.google.protobuf.ByteString
        getInstanceFieldStringsBytes(int index) {
      return instanceFieldStrings_.getByteString(index);
    }

    public static final int PERMISSION_STRINGS_FIELD_NUMBER = 8;
    private com.google.protobuf.LazyStringList permissionStrings_;
    /**
     * <code>repeated string permission_strings = 8;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getPermissionStringsList() {
      return permissionStrings_;
    }
    /**
     * <code>repeated string permission_strings = 8;</code>
     */
    public int getPermissionStringsCount() {
      return permissionStrings_.size();
    }
    /**
     * <code>repeated string permission_strings = 8;</code>
     */
    public java.lang.String getPermissionStrings(int index) {
      return permissionStrings_.get(index);
    }
    /**
     * <code>repeated string permission_strings = 8;</code>
     */
    public com.google.protobuf.ByteString
        getPermissionStringsBytes(int index) {
      return permissionStrings_.getByteString(index);
    }

    public static final int METHODS_FIELD_NUMBER = 9;
    private java.util.List<proto.ClassSig.MethodAttributeProto> methods_;
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
     */
    public java.util.List<proto.ClassSig.MethodAttributeProto> getMethodsList() {
      return methods_;
    }
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
     */
    public java.util.List<? extends proto.ClassSig.MethodAttributeProtoOrBuilder> 
        getMethodsOrBuilderList() {
      return methods_;
    }
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
     */
    public int getMethodsCount() {
      return methods_.size();
    }
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
     */
    public proto.ClassSig.MethodAttributeProto getMethods(int index) {
      return methods_.get(index);
    }
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
     */
    public proto.ClassSig.MethodAttributeProtoOrBuilder getMethodsOrBuilder(
        int index) {
      return methods_.get(index);
    }

    public static final int OUTER_CLASS_NAME_FIELD_NUMBER = 10;
    private volatile java.lang.Object outerClassName_;
    /**
     * <code>string outer_class_name = 10;</code>
     */
    public java.lang.String getOuterClassName() {
      java.lang.Object ref = outerClassName_;
      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();
        outerClassName_ = s;
        return s;
      }
    }
    /**
     * <code>string outer_class_name = 10;</code>
     */
    public com.google.protobuf.ByteString
        getOuterClassNameBytes() {
      java.lang.Object ref = outerClassName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        outerClassName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MODIFIERS_FIELD_NUMBER = 11;
    private volatile java.lang.Object modifiers_;
    /**
     * <code>string modifiers = 11;</code>
     */
    public java.lang.String getModifiers() {
      java.lang.Object ref = modifiers_;
      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();
        modifiers_ = s;
        return s;
      }
    }
    /**
     * <code>string modifiers = 11;</code>
     */
    public com.google.protobuf.ByteString
        getModifiersBytes() {
      java.lang.Object ref = modifiers_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        modifiers_ = 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 (!getClassNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, className_);
      }
      if (!getSuperClassNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, superClassName_);
      }
      for (int i = 0; i < interfaceClassNames_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, interfaceClassNames_.getRaw(i));
      }
      if (!getPackageNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, packageName_);
      }
      if (isEntryPoint_ != false) {
        output.writeBool(5, isEntryPoint_);
      }
      for (int i = 0; i < staticFieldStrings_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, staticFieldStrings_.getRaw(i));
      }
      for (int i = 0; i < instanceFieldStrings_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, instanceFieldStrings_.getRaw(i));
      }
      for (int i = 0; i < permissionStrings_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, permissionStrings_.getRaw(i));
      }
      for (int i = 0; i < methods_.size(); i++) {
        output.writeMessage(9, methods_.get(i));
      }
      if (!getOuterClassNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 10, outerClassName_);
      }
      if (!getModifiersBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 11, modifiers_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getClassNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, className_);
      }
      if (!getSuperClassNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, superClassName_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < interfaceClassNames_.size(); i++) {
          dataSize += computeStringSizeNoTag(interfaceClassNames_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getInterfaceClassNamesList().size();
      }
      if (!getPackageNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, packageName_);
      }
      if (isEntryPoint_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, isEntryPoint_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < staticFieldStrings_.size(); i++) {
          dataSize += computeStringSizeNoTag(staticFieldStrings_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getStaticFieldStringsList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < instanceFieldStrings_.size(); i++) {
          dataSize += computeStringSizeNoTag(instanceFieldStrings_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getInstanceFieldStringsList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < permissionStrings_.size(); i++) {
          dataSize += computeStringSizeNoTag(permissionStrings_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getPermissionStringsList().size();
      }
      for (int i = 0; i < methods_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, methods_.get(i));
      }
      if (!getOuterClassNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, outerClassName_);
      }
      if (!getModifiersBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(11, modifiers_);
      }
      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.ClassSig.ClassAttributeProto)) {
        return super.equals(obj);
      }
      proto.ClassSig.ClassAttributeProto other = (proto.ClassSig.ClassAttributeProto) obj;

      boolean result = true;
      result = result && getClassName()
          .equals(other.getClassName());
      result = result && getSuperClassName()
          .equals(other.getSuperClassName());
      result = result && getInterfaceClassNamesList()
          .equals(other.getInterfaceClassNamesList());
      result = result && getPackageName()
          .equals(other.getPackageName());
      result = result && (getIsEntryPoint()
          == other.getIsEntryPoint());
      result = result && getStaticFieldStringsList()
          .equals(other.getStaticFieldStringsList());
      result = result && getInstanceFieldStringsList()
          .equals(other.getInstanceFieldStringsList());
      result = result && getPermissionStringsList()
          .equals(other.getPermissionStringsList());
      result = result && getMethodsList()
          .equals(other.getMethodsList());
      result = result && getOuterClassName()
          .equals(other.getOuterClassName());
      result = result && getModifiers()
          .equals(other.getModifiers());
      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) + CLASS_NAME_FIELD_NUMBER;
      hash = (53 * hash) + getClassName().hashCode();
      hash = (37 * hash) + SUPER_CLASS_NAME_FIELD_NUMBER;
      hash = (53 * hash) + getSuperClassName().hashCode();
      if (getInterfaceClassNamesCount() > 0) {
        hash = (37 * hash) + INTERFACE_CLASS_NAMES_FIELD_NUMBER;
        hash = (53 * hash) + getInterfaceClassNamesList().hashCode();
      }
      hash = (37 * hash) + PACKAGE_NAME_FIELD_NUMBER;
      hash = (53 * hash) + getPackageName().hashCode();
      hash = (37 * hash) + IS_ENTRY_POINT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getIsEntryPoint());
      if (getStaticFieldStringsCount() > 0) {
        hash = (37 * hash) + STATIC_FIELD_STRINGS_FIELD_NUMBER;
        hash = (53 * hash) + getStaticFieldStringsList().hashCode();
      }
      if (getInstanceFieldStringsCount() > 0) {
        hash = (37 * hash) + INSTANCE_FIELD_STRINGS_FIELD_NUMBER;
        hash = (53 * hash) + getInstanceFieldStringsList().hashCode();
      }
      if (getPermissionStringsCount() > 0) {
        hash = (37 * hash) + PERMISSION_STRINGS_FIELD_NUMBER;
        hash = (53 * hash) + getPermissionStringsList().hashCode();
      }
      if (getMethodsCount() > 0) {
        hash = (37 * hash) + METHODS_FIELD_NUMBER;
        hash = (53 * hash) + getMethodsList().hashCode();
      }
      hash = (37 * hash) + OUTER_CLASS_NAME_FIELD_NUMBER;
      hash = (53 * hash) + getOuterClassName().hashCode();
      hash = (37 * hash) + MODIFIERS_FIELD_NUMBER;
      hash = (53 * hash) + getModifiers().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.ClassSig.ClassAttributeProto parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.ClassAttributeProto parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.ClassAttributeProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.ClassAttributeProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.ClassAttributeProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.ClassAttributeProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.ClassAttributeProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.ClassAttributeProto 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.ClassSig.ClassAttributeProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.ClassSig.ClassAttributeProto 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.ClassSig.ClassAttributeProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.ClassAttributeProto 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.ClassSig.ClassAttributeProto 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.ClassAttributeProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.ClassAttributeProto)
        proto.ClassSig.ClassAttributeProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.ClassSig.internal_static_proto_ClassAttributeProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.ClassSig.internal_static_proto_ClassAttributeProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.ClassSig.ClassAttributeProto.class, proto.ClassSig.ClassAttributeProto.Builder.class);
      }

      // Construct using proto.ClassSig.ClassAttributeProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

        superClassName_ = "";

        interfaceClassNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        packageName_ = "";

        isEntryPoint_ = false;

        staticFieldStrings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        instanceFieldStrings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000040);
        permissionStrings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000080);
        if (methodsBuilder_ == null) {
          methods_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          methodsBuilder_.clear();
        }
        outerClassName_ = "";

        modifiers_ = "";

        return this;
      }

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

      @java.lang.Override
      public proto.ClassSig.ClassAttributeProto getDefaultInstanceForType() {
        return proto.ClassSig.ClassAttributeProto.getDefaultInstance();
      }

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

      @java.lang.Override
      public proto.ClassSig.ClassAttributeProto buildPartial() {
        proto.ClassSig.ClassAttributeProto result = new proto.ClassSig.ClassAttributeProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.className_ = className_;
        result.superClassName_ = superClassName_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          interfaceClassNames_ = interfaceClassNames_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.interfaceClassNames_ = interfaceClassNames_;
        result.packageName_ = packageName_;
        result.isEntryPoint_ = isEntryPoint_;
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          staticFieldStrings_ = staticFieldStrings_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.staticFieldStrings_ = staticFieldStrings_;
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          instanceFieldStrings_ = instanceFieldStrings_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000040);
        }
        result.instanceFieldStrings_ = instanceFieldStrings_;
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          permissionStrings_ = permissionStrings_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000080);
        }
        result.permissionStrings_ = permissionStrings_;
        if (methodsBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            methods_ = java.util.Collections.unmodifiableList(methods_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.methods_ = methods_;
        } else {
          result.methods_ = methodsBuilder_.build();
        }
        result.outerClassName_ = outerClassName_;
        result.modifiers_ = modifiers_;
        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.ClassSig.ClassAttributeProto) {
          return mergeFrom((proto.ClassSig.ClassAttributeProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.ClassSig.ClassAttributeProto other) {
        if (other == proto.ClassSig.ClassAttributeProto.getDefaultInstance()) return this;
        if (!other.getClassName().isEmpty()) {
          className_ = other.className_;
          onChanged();
        }
        if (!other.getSuperClassName().isEmpty()) {
          superClassName_ = other.superClassName_;
          onChanged();
        }
        if (!other.interfaceClassNames_.isEmpty()) {
          if (interfaceClassNames_.isEmpty()) {
            interfaceClassNames_ = other.interfaceClassNames_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureInterfaceClassNamesIsMutable();
            interfaceClassNames_.addAll(other.interfaceClassNames_);
          }
          onChanged();
        }
        if (!other.getPackageName().isEmpty()) {
          packageName_ = other.packageName_;
          onChanged();
        }
        if (other.getIsEntryPoint() != false) {
          setIsEntryPoint(other.getIsEntryPoint());
        }
        if (!other.staticFieldStrings_.isEmpty()) {
          if (staticFieldStrings_.isEmpty()) {
            staticFieldStrings_ = other.staticFieldStrings_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureStaticFieldStringsIsMutable();
            staticFieldStrings_.addAll(other.staticFieldStrings_);
          }
          onChanged();
        }
        if (!other.instanceFieldStrings_.isEmpty()) {
          if (instanceFieldStrings_.isEmpty()) {
            instanceFieldStrings_ = other.instanceFieldStrings_;
            bitField0_ = (bitField0_ & ~0x00000040);
          } else {
            ensureInstanceFieldStringsIsMutable();
            instanceFieldStrings_.addAll(other.instanceFieldStrings_);
          }
          onChanged();
        }
        if (!other.permissionStrings_.isEmpty()) {
          if (permissionStrings_.isEmpty()) {
            permissionStrings_ = other.permissionStrings_;
            bitField0_ = (bitField0_ & ~0x00000080);
          } else {
            ensurePermissionStringsIsMutable();
            permissionStrings_.addAll(other.permissionStrings_);
          }
          onChanged();
        }
        if (methodsBuilder_ == null) {
          if (!other.methods_.isEmpty()) {
            if (methods_.isEmpty()) {
              methods_ = other.methods_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureMethodsIsMutable();
              methods_.addAll(other.methods_);
            }
            onChanged();
          }
        } else {
          if (!other.methods_.isEmpty()) {
            if (methodsBuilder_.isEmpty()) {
              methodsBuilder_.dispose();
              methodsBuilder_ = null;
              methods_ = other.methods_;
              bitField0_ = (bitField0_ & ~0x00000100);
              methodsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMethodsFieldBuilder() : null;
            } else {
              methodsBuilder_.addAllMessages(other.methods_);
            }
          }
        }
        if (!other.getOuterClassName().isEmpty()) {
          outerClassName_ = other.outerClassName_;
          onChanged();
        }
        if (!other.getModifiers().isEmpty()) {
          modifiers_ = other.modifiers_;
          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.ClassSig.ClassAttributeProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.ClassSig.ClassAttributeProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object className_ = "";
      /**
       * <code>string class_name = 1;</code>
       */
      public java.lang.String getClassName() {
        java.lang.Object ref = className_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          className_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string class_name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getClassNameBytes() {
        java.lang.Object ref = className_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          className_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string class_name = 1;</code>
       */
      public Builder setClassName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        className_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string class_name = 1;</code>
       */
      public Builder clearClassName() {
        
        className_ = getDefaultInstance().getClassName();
        onChanged();
        return this;
      }
      /**
       * <code>string class_name = 1;</code>
       */
      public Builder setClassNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        className_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object superClassName_ = "";
      /**
       * <code>string super_class_name = 2;</code>
       */
      public java.lang.String getSuperClassName() {
        java.lang.Object ref = superClassName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          superClassName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string super_class_name = 2;</code>
       */
      public com.google.protobuf.ByteString
          getSuperClassNameBytes() {
        java.lang.Object ref = superClassName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          superClassName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string super_class_name = 2;</code>
       */
      public Builder setSuperClassName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        superClassName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string super_class_name = 2;</code>
       */
      public Builder clearSuperClassName() {
        
        superClassName_ = getDefaultInstance().getSuperClassName();
        onChanged();
        return this;
      }
      /**
       * <code>string super_class_name = 2;</code>
       */
      public Builder setSuperClassNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        superClassName_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList interfaceClassNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureInterfaceClassNamesIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          interfaceClassNames_ = new com.google.protobuf.LazyStringArrayList(interfaceClassNames_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated string interface_class_names = 3;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getInterfaceClassNamesList() {
        return interfaceClassNames_.getUnmodifiableView();
      }
      /**
       * <code>repeated string interface_class_names = 3;</code>
       */
      public int getInterfaceClassNamesCount() {
        return interfaceClassNames_.size();
      }
      /**
       * <code>repeated string interface_class_names = 3;</code>
       */
      public java.lang.String getInterfaceClassNames(int index) {
        return interfaceClassNames_.get(index);
      }
      /**
       * <code>repeated string interface_class_names = 3;</code>
       */
      public com.google.protobuf.ByteString
          getInterfaceClassNamesBytes(int index) {
        return interfaceClassNames_.getByteString(index);
      }
      /**
       * <code>repeated string interface_class_names = 3;</code>
       */
      public Builder setInterfaceClassNames(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureInterfaceClassNamesIsMutable();
        interfaceClassNames_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string interface_class_names = 3;</code>
       */
      public Builder addInterfaceClassNames(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureInterfaceClassNamesIsMutable();
        interfaceClassNames_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string interface_class_names = 3;</code>
       */
      public Builder addAllInterfaceClassNames(
          java.lang.Iterable<java.lang.String> values) {
        ensureInterfaceClassNamesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, interfaceClassNames_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string interface_class_names = 3;</code>
       */
      public Builder clearInterfaceClassNames() {
        interfaceClassNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string interface_class_names = 3;</code>
       */
      public Builder addInterfaceClassNamesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureInterfaceClassNamesIsMutable();
        interfaceClassNames_.add(value);
        onChanged();
        return this;
      }

      private java.lang.Object packageName_ = "";
      /**
       * <code>string package_name = 4;</code>
       */
      public java.lang.String getPackageName() {
        java.lang.Object ref = packageName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          packageName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string package_name = 4;</code>
       */
      public com.google.protobuf.ByteString
          getPackageNameBytes() {
        java.lang.Object ref = packageName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          packageName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string package_name = 4;</code>
       */
      public Builder setPackageName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        packageName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string package_name = 4;</code>
       */
      public Builder clearPackageName() {
        
        packageName_ = getDefaultInstance().getPackageName();
        onChanged();
        return this;
      }
      /**
       * <code>string package_name = 4;</code>
       */
      public Builder setPackageNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        packageName_ = value;
        onChanged();
        return this;
      }

      private boolean isEntryPoint_ ;
      /**
       * <code>bool is_entry_point = 5;</code>
       */
      public boolean getIsEntryPoint() {
        return isEntryPoint_;
      }
      /**
       * <code>bool is_entry_point = 5;</code>
       */
      public Builder setIsEntryPoint(boolean value) {
        
        isEntryPoint_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool is_entry_point = 5;</code>
       */
      public Builder clearIsEntryPoint() {
        
        isEntryPoint_ = false;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList staticFieldStrings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureStaticFieldStringsIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          staticFieldStrings_ = new com.google.protobuf.LazyStringArrayList(staticFieldStrings_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <code>repeated string static_field_strings = 6;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getStaticFieldStringsList() {
        return staticFieldStrings_.getUnmodifiableView();
      }
      /**
       * <code>repeated string static_field_strings = 6;</code>
       */
      public int getStaticFieldStringsCount() {
        return staticFieldStrings_.size();
      }
      /**
       * <code>repeated string static_field_strings = 6;</code>
       */
      public java.lang.String getStaticFieldStrings(int index) {
        return staticFieldStrings_.get(index);
      }
      /**
       * <code>repeated string static_field_strings = 6;</code>
       */
      public com.google.protobuf.ByteString
          getStaticFieldStringsBytes(int index) {
        return staticFieldStrings_.getByteString(index);
      }
      /**
       * <code>repeated string static_field_strings = 6;</code>
       */
      public Builder setStaticFieldStrings(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureStaticFieldStringsIsMutable();
        staticFieldStrings_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string static_field_strings = 6;</code>
       */
      public Builder addStaticFieldStrings(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureStaticFieldStringsIsMutable();
        staticFieldStrings_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string static_field_strings = 6;</code>
       */
      public Builder addAllStaticFieldStrings(
          java.lang.Iterable<java.lang.String> values) {
        ensureStaticFieldStringsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, staticFieldStrings_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string static_field_strings = 6;</code>
       */
      public Builder clearStaticFieldStrings() {
        staticFieldStrings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string static_field_strings = 6;</code>
       */
      public Builder addStaticFieldStringsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureStaticFieldStringsIsMutable();
        staticFieldStrings_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList instanceFieldStrings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureInstanceFieldStringsIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          instanceFieldStrings_ = new com.google.protobuf.LazyStringArrayList(instanceFieldStrings_);
          bitField0_ |= 0x00000040;
         }
      }
      /**
       * <code>repeated string instance_field_strings = 7;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getInstanceFieldStringsList() {
        return instanceFieldStrings_.getUnmodifiableView();
      }
      /**
       * <code>repeated string instance_field_strings = 7;</code>
       */
      public int getInstanceFieldStringsCount() {
        return instanceFieldStrings_.size();
      }
      /**
       * <code>repeated string instance_field_strings = 7;</code>
       */
      public java.lang.String getInstanceFieldStrings(int index) {
        return instanceFieldStrings_.get(index);
      }
      /**
       * <code>repeated string instance_field_strings = 7;</code>
       */
      public com.google.protobuf.ByteString
          getInstanceFieldStringsBytes(int index) {
        return instanceFieldStrings_.getByteString(index);
      }
      /**
       * <code>repeated string instance_field_strings = 7;</code>
       */
      public Builder setInstanceFieldStrings(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureInstanceFieldStringsIsMutable();
        instanceFieldStrings_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string instance_field_strings = 7;</code>
       */
      public Builder addInstanceFieldStrings(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureInstanceFieldStringsIsMutable();
        instanceFieldStrings_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string instance_field_strings = 7;</code>
       */
      public Builder addAllInstanceFieldStrings(
          java.lang.Iterable<java.lang.String> values) {
        ensureInstanceFieldStringsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, instanceFieldStrings_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string instance_field_strings = 7;</code>
       */
      public Builder clearInstanceFieldStrings() {
        instanceFieldStrings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000040);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string instance_field_strings = 7;</code>
       */
      public Builder addInstanceFieldStringsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureInstanceFieldStringsIsMutable();
        instanceFieldStrings_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList permissionStrings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensurePermissionStringsIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          permissionStrings_ = new com.google.protobuf.LazyStringArrayList(permissionStrings_);
          bitField0_ |= 0x00000080;
         }
      }
      /**
       * <code>repeated string permission_strings = 8;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getPermissionStringsList() {
        return permissionStrings_.getUnmodifiableView();
      }
      /**
       * <code>repeated string permission_strings = 8;</code>
       */
      public int getPermissionStringsCount() {
        return permissionStrings_.size();
      }
      /**
       * <code>repeated string permission_strings = 8;</code>
       */
      public java.lang.String getPermissionStrings(int index) {
        return permissionStrings_.get(index);
      }
      /**
       * <code>repeated string permission_strings = 8;</code>
       */
      public com.google.protobuf.ByteString
          getPermissionStringsBytes(int index) {
        return permissionStrings_.getByteString(index);
      }
      /**
       * <code>repeated string permission_strings = 8;</code>
       */
      public Builder setPermissionStrings(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePermissionStringsIsMutable();
        permissionStrings_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string permission_strings = 8;</code>
       */
      public Builder addPermissionStrings(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePermissionStringsIsMutable();
        permissionStrings_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string permission_strings = 8;</code>
       */
      public Builder addAllPermissionStrings(
          java.lang.Iterable<java.lang.String> values) {
        ensurePermissionStringsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, permissionStrings_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string permission_strings = 8;</code>
       */
      public Builder clearPermissionStrings() {
        permissionStrings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string permission_strings = 8;</code>
       */
      public Builder addPermissionStringsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensurePermissionStringsIsMutable();
        permissionStrings_.add(value);
        onChanged();
        return this;
      }

      private java.util.List<proto.ClassSig.MethodAttributeProto> methods_ =
        java.util.Collections.emptyList();
      private void ensureMethodsIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          methods_ = new java.util.ArrayList<proto.ClassSig.MethodAttributeProto>(methods_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.MethodAttributeProto, proto.ClassSig.MethodAttributeProto.Builder, proto.ClassSig.MethodAttributeProtoOrBuilder> methodsBuilder_;

      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public java.util.List<proto.ClassSig.MethodAttributeProto> getMethodsList() {
        if (methodsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(methods_);
        } else {
          return methodsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public int getMethodsCount() {
        if (methodsBuilder_ == null) {
          return methods_.size();
        } else {
          return methodsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public proto.ClassSig.MethodAttributeProto getMethods(int index) {
        if (methodsBuilder_ == null) {
          return methods_.get(index);
        } else {
          return methodsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public Builder setMethods(
          int index, proto.ClassSig.MethodAttributeProto value) {
        if (methodsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodsIsMutable();
          methods_.set(index, value);
          onChanged();
        } else {
          methodsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public Builder setMethods(
          int index, proto.ClassSig.MethodAttributeProto.Builder builderForValue) {
        if (methodsBuilder_ == null) {
          ensureMethodsIsMutable();
          methods_.set(index, builderForValue.build());
          onChanged();
        } else {
          methodsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public Builder addMethods(proto.ClassSig.MethodAttributeProto value) {
        if (methodsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodsIsMutable();
          methods_.add(value);
          onChanged();
        } else {
          methodsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public Builder addMethods(
          int index, proto.ClassSig.MethodAttributeProto value) {
        if (methodsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodsIsMutable();
          methods_.add(index, value);
          onChanged();
        } else {
          methodsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public Builder addMethods(
          proto.ClassSig.MethodAttributeProto.Builder builderForValue) {
        if (methodsBuilder_ == null) {
          ensureMethodsIsMutable();
          methods_.add(builderForValue.build());
          onChanged();
        } else {
          methodsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public Builder addMethods(
          int index, proto.ClassSig.MethodAttributeProto.Builder builderForValue) {
        if (methodsBuilder_ == null) {
          ensureMethodsIsMutable();
          methods_.add(index, builderForValue.build());
          onChanged();
        } else {
          methodsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public Builder addAllMethods(
          java.lang.Iterable<? extends proto.ClassSig.MethodAttributeProto> values) {
        if (methodsBuilder_ == null) {
          ensureMethodsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, methods_);
          onChanged();
        } else {
          methodsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public Builder clearMethods() {
        if (methodsBuilder_ == null) {
          methods_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          methodsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public Builder removeMethods(int index) {
        if (methodsBuilder_ == null) {
          ensureMethodsIsMutable();
          methods_.remove(index);
          onChanged();
        } else {
          methodsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public proto.ClassSig.MethodAttributeProto.Builder getMethodsBuilder(
          int index) {
        return getMethodsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public proto.ClassSig.MethodAttributeProtoOrBuilder getMethodsOrBuilder(
          int index) {
        if (methodsBuilder_ == null) {
          return methods_.get(index);  } else {
          return methodsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public java.util.List<? extends proto.ClassSig.MethodAttributeProtoOrBuilder> 
           getMethodsOrBuilderList() {
        if (methodsBuilder_ != null) {
          return methodsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(methods_);
        }
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public proto.ClassSig.MethodAttributeProto.Builder addMethodsBuilder() {
        return getMethodsFieldBuilder().addBuilder(
            proto.ClassSig.MethodAttributeProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public proto.ClassSig.MethodAttributeProto.Builder addMethodsBuilder(
          int index) {
        return getMethodsFieldBuilder().addBuilder(
            index, proto.ClassSig.MethodAttributeProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 9;</code>
       */
      public java.util.List<proto.ClassSig.MethodAttributeProto.Builder> 
           getMethodsBuilderList() {
        return getMethodsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.MethodAttributeProto, proto.ClassSig.MethodAttributeProto.Builder, proto.ClassSig.MethodAttributeProtoOrBuilder> 
          getMethodsFieldBuilder() {
        if (methodsBuilder_ == null) {
          methodsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.ClassSig.MethodAttributeProto, proto.ClassSig.MethodAttributeProto.Builder, proto.ClassSig.MethodAttributeProtoOrBuilder>(
                  methods_,
                  ((bitField0_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          methods_ = null;
        }
        return methodsBuilder_;
      }

      private java.lang.Object outerClassName_ = "";
      /**
       * <code>string outer_class_name = 10;</code>
       */
      public java.lang.String getOuterClassName() {
        java.lang.Object ref = outerClassName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          outerClassName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string outer_class_name = 10;</code>
       */
      public com.google.protobuf.ByteString
          getOuterClassNameBytes() {
        java.lang.Object ref = outerClassName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          outerClassName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string outer_class_name = 10;</code>
       */
      public Builder setOuterClassName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        outerClassName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string outer_class_name = 10;</code>
       */
      public Builder clearOuterClassName() {
        
        outerClassName_ = getDefaultInstance().getOuterClassName();
        onChanged();
        return this;
      }
      /**
       * <code>string outer_class_name = 10;</code>
       */
      public Builder setOuterClassNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        outerClassName_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object modifiers_ = "";
      /**
       * <code>string modifiers = 11;</code>
       */
      public java.lang.String getModifiers() {
        java.lang.Object ref = modifiers_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          modifiers_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string modifiers = 11;</code>
       */
      public com.google.protobuf.ByteString
          getModifiersBytes() {
        java.lang.Object ref = modifiers_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          modifiers_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string modifiers = 11;</code>
       */
      public Builder setModifiers(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        modifiers_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string modifiers = 11;</code>
       */
      public Builder clearModifiers() {
        
        modifiers_ = getDefaultInstance().getModifiers();
        onChanged();
        return this;
      }
      /**
       * <code>string modifiers = 11;</code>
       */
      public Builder setModifiersBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        modifiers_ = 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.ClassAttributeProto)
    }

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

    public static proto.ClassSig.ClassAttributeProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.ClassSig.ClassAttributeProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

    /**
     * <code>string classname1 = 1;</code>
     */
    java.lang.String getClassname1();
    /**
     * <code>string classname1 = 1;</code>
     */
    com.google.protobuf.ByteString
        getClassname1Bytes();

    /**
     * <code>string classname2 = 2;</code>
     */
    java.lang.String getClassname2();
    /**
     * <code>string classname2 = 2;</code>
     */
    com.google.protobuf.ByteString
        getClassname2Bytes();

    /**
     * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
     */
    java.util.List<proto.ClassSig.ClassRelationProto.RelationCounter> 
        getRelationCountersList();
    /**
     * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
     */
    proto.ClassSig.ClassRelationProto.RelationCounter getRelationCounters(int index);
    /**
     * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
     */
    int getRelationCountersCount();
    /**
     * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
     */
    java.util.List<? extends proto.ClassSig.ClassRelationProto.RelationCounterOrBuilder> 
        getRelationCountersOrBuilderList();
    /**
     * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
     */
    proto.ClassSig.ClassRelationProto.RelationCounterOrBuilder getRelationCountersOrBuilder(
        int index);

    /**
     * <pre>
     * classname1 is absolutely application class, because we need to inspect the implementation to get
     * the relationship between classname1 and classname2.
     * but classname2 can be non-application classes and can require permissions.
     * </pre>
     *
     * <code>bool classname2_is_application_class = 4;</code>
     */
    boolean getClassname2IsApplicationClass();

    /**
     * <pre>
     * classname2 can require permissions, only record this if classname2 is not application class
     * </pre>
     *
     * <code>repeated string classname2_permissions = 5;</code>
     */
    java.util.List<java.lang.String>
        getClassname2PermissionsList();
    /**
     * <pre>
     * classname2 can require permissions, only record this if classname2 is not application class
     * </pre>
     *
     * <code>repeated string classname2_permissions = 5;</code>
     */
    int getClassname2PermissionsCount();
    /**
     * <pre>
     * classname2 can require permissions, only record this if classname2 is not application class
     * </pre>
     *
     * <code>repeated string classname2_permissions = 5;</code>
     */
    java.lang.String getClassname2Permissions(int index);
    /**
     * <pre>
     * classname2 can require permissions, only record this if classname2 is not application class
     * </pre>
     *
     * <code>repeated string classname2_permissions = 5;</code>
     */
    com.google.protobuf.ByteString
        getClassname2PermissionsBytes(int index);
  }
  /**
   * Protobuf type {@code proto.ClassRelationProto}
   */
  public  static final class ClassRelationProto extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.ClassRelationProto)
      ClassRelationProtoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ClassRelationProto.newBuilder() to construct.
    private ClassRelationProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ClassRelationProto() {
      classname1_ = "";
      classname2_ = "";
      relationCounters_ = java.util.Collections.emptyList();
      classname2IsApplicationClass_ = false;
      classname2Permissions_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ClassRelationProto(
        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();

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

              classname2_ = s;
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                relationCounters_ = new java.util.ArrayList<proto.ClassSig.ClassRelationProto.RelationCounter>();
                mutable_bitField0_ |= 0x00000004;
              }
              relationCounters_.add(
                  input.readMessage(proto.ClassSig.ClassRelationProto.RelationCounter.parser(), extensionRegistry));
              break;
            }
            case 32: {

              classname2IsApplicationClass_ = input.readBool();
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                classname2Permissions_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000010;
              }
              classname2Permissions_.add(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 {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          relationCounters_ = java.util.Collections.unmodifiableList(relationCounters_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          classname2Permissions_ = classname2Permissions_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.ClassSig.internal_static_proto_ClassRelationProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.ClassSig.internal_static_proto_ClassRelationProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.ClassSig.ClassRelationProto.class, proto.ClassSig.ClassRelationProto.Builder.class);
    }

    /**
     * <pre>
     * This should be consistent with ClassRelation.java
     * </pre>
     *
     * Protobuf enum {@code proto.ClassRelationProto.RelationType}
     */
    public enum RelationType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>INHERITANCE = 0;</code>
       */
      INHERITANCE(0),
      /**
       * <code>STATIC_ARRAY_FIELD = 1;</code>
       */
      STATIC_ARRAY_FIELD(1),
      /**
       * <code>STATIC__FIELD = 2;</code>
       */
      STATIC__FIELD(2),
      /**
       * <code>INSTANCE_ARRAY_FIELD = 3;</code>
       */
      INSTANCE_ARRAY_FIELD(3),
      /**
       * <code>INSTANCE_FIELD = 4;</code>
       */
      INSTANCE_FIELD(4),
      /**
       * <code>METHOD_ARRAY_PARAMERTER = 5;</code>
       */
      METHOD_ARRAY_PARAMERTER(5),
      /**
       * <code>METHOD_PARAMETER = 6;</code>
       */
      METHOD_PARAMETER(6),
      /**
       * <code>METHOD_ARRAY_RETURN = 7;</code>
       */
      METHOD_ARRAY_RETURN(7),
      /**
       * <code>METHOD_RETURN = 8;</code>
       */
      METHOD_RETURN(8),
      /**
       * <code>METHOD_ARRAY_LOCAL = 9;</code>
       */
      METHOD_ARRAY_LOCAL(9),
      /**
       * <code>METHOD_LOCAL = 10;</code>
       */
      METHOD_LOCAL(10),
      /**
       * <code>STMT_ARRAY_REF = 11;</code>
       */
      STMT_ARRAY_REF(11),
      /**
       * <code>STMT_INSTANCE_FIELD_REF = 12;</code>
       */
      STMT_INSTANCE_FIELD_REF(12),
      /**
       * <code>STMT_STATIC_FIELD_REF = 13;</code>
       */
      STMT_STATIC_FIELD_REF(13),
      /**
       * <code>STMT_LOCAL_REF = 14;</code>
       */
      STMT_LOCAL_REF(14),
      /**
       * <code>CAST_EXPR = 15;</code>
       */
      CAST_EXPR(15),
      /**
       * <code>INSTANCE_OF_EXPR = 16;</code>
       */
      INSTANCE_OF_EXPR(16),
      /**
       * <code>NEW_EXPR = 17;</code>
       */
      NEW_EXPR(17),
      /**
       * <code>NEW_ARRAY_EXPR = 18;</code>
       */
      NEW_ARRAY_EXPR(18),
      /**
       * <code>NEW_MULTI_ARRAY_EXPR = 19;</code>
       */
      NEW_MULTI_ARRAY_EXPR(19),
      /**
       * <code>INVOKE_EXPR = 20;</code>
       */
      INVOKE_EXPR(20),
      /**
       * <code>ICC = 21;</code>
       */
      ICC(21),
      /**
       * <code>IMPL = 22;</code>
       */
      IMPL(22),
      /**
       * <code>OUTER_CLASS = 23;</code>
       */
      OUTER_CLASS(23),
      /**
       * <code>ClassRelationNone = 24;</code>
       */
      ClassRelationNone(24),
      UNRECOGNIZED(-1),
      ;

      /**
       * <code>INHERITANCE = 0;</code>
       */
      public static final int INHERITANCE_VALUE = 0;
      /**
       * <code>STATIC_ARRAY_FIELD = 1;</code>
       */
      public static final int STATIC_ARRAY_FIELD_VALUE = 1;
      /**
       * <code>STATIC__FIELD = 2;</code>
       */
      public static final int STATIC__FIELD_VALUE = 2;
      /**
       * <code>INSTANCE_ARRAY_FIELD = 3;</code>
       */
      public static final int INSTANCE_ARRAY_FIELD_VALUE = 3;
      /**
       * <code>INSTANCE_FIELD = 4;</code>
       */
      public static final int INSTANCE_FIELD_VALUE = 4;
      /**
       * <code>METHOD_ARRAY_PARAMERTER = 5;</code>
       */
      public static final int METHOD_ARRAY_PARAMERTER_VALUE = 5;
      /**
       * <code>METHOD_PARAMETER = 6;</code>
       */
      public static final int METHOD_PARAMETER_VALUE = 6;
      /**
       * <code>METHOD_ARRAY_RETURN = 7;</code>
       */
      public static final int METHOD_ARRAY_RETURN_VALUE = 7;
      /**
       * <code>METHOD_RETURN = 8;</code>
       */
      public static final int METHOD_RETURN_VALUE = 8;
      /**
       * <code>METHOD_ARRAY_LOCAL = 9;</code>
       */
      public static final int METHOD_ARRAY_LOCAL_VALUE = 9;
      /**
       * <code>METHOD_LOCAL = 10;</code>
       */
      public static final int METHOD_LOCAL_VALUE = 10;
      /**
       * <code>STMT_ARRAY_REF = 11;</code>
       */
      public static final int STMT_ARRAY_REF_VALUE = 11;
      /**
       * <code>STMT_INSTANCE_FIELD_REF = 12;</code>
       */
      public static final int STMT_INSTANCE_FIELD_REF_VALUE = 12;
      /**
       * <code>STMT_STATIC_FIELD_REF = 13;</code>
       */
      public static final int STMT_STATIC_FIELD_REF_VALUE = 13;
      /**
       * <code>STMT_LOCAL_REF = 14;</code>
       */
      public static final int STMT_LOCAL_REF_VALUE = 14;
      /**
       * <code>CAST_EXPR = 15;</code>
       */
      public static final int CAST_EXPR_VALUE = 15;
      /**
       * <code>INSTANCE_OF_EXPR = 16;</code>
       */
      public static final int INSTANCE_OF_EXPR_VALUE = 16;
      /**
       * <code>NEW_EXPR = 17;</code>
       */
      public static final int NEW_EXPR_VALUE = 17;
      /**
       * <code>NEW_ARRAY_EXPR = 18;</code>
       */
      public static final int NEW_ARRAY_EXPR_VALUE = 18;
      /**
       * <code>NEW_MULTI_ARRAY_EXPR = 19;</code>
       */
      public static final int NEW_MULTI_ARRAY_EXPR_VALUE = 19;
      /**
       * <code>INVOKE_EXPR = 20;</code>
       */
      public static final int INVOKE_EXPR_VALUE = 20;
      /**
       * <code>ICC = 21;</code>
       */
      public static final int ICC_VALUE = 21;
      /**
       * <code>IMPL = 22;</code>
       */
      public static final int IMPL_VALUE = 22;
      /**
       * <code>OUTER_CLASS = 23;</code>
       */
      public static final int OUTER_CLASS_VALUE = 23;
      /**
       * <code>ClassRelationNone = 24;</code>
       */
      public static final int ClassRelationNone_VALUE = 24;


      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 RelationType valueOf(int value) {
        return forNumber(value);
      }

      public static RelationType forNumber(int value) {
        switch (value) {
          case 0: return INHERITANCE;
          case 1: return STATIC_ARRAY_FIELD;
          case 2: return STATIC__FIELD;
          case 3: return INSTANCE_ARRAY_FIELD;
          case 4: return INSTANCE_FIELD;
          case 5: return METHOD_ARRAY_PARAMERTER;
          case 6: return METHOD_PARAMETER;
          case 7: return METHOD_ARRAY_RETURN;
          case 8: return METHOD_RETURN;
          case 9: return METHOD_ARRAY_LOCAL;
          case 10: return METHOD_LOCAL;
          case 11: return STMT_ARRAY_REF;
          case 12: return STMT_INSTANCE_FIELD_REF;
          case 13: return STMT_STATIC_FIELD_REF;
          case 14: return STMT_LOCAL_REF;
          case 15: return CAST_EXPR;
          case 16: return INSTANCE_OF_EXPR;
          case 17: return NEW_EXPR;
          case 18: return NEW_ARRAY_EXPR;
          case 19: return NEW_MULTI_ARRAY_EXPR;
          case 20: return INVOKE_EXPR;
          case 21: return ICC;
          case 22: return IMPL;
          case 23: return OUTER_CLASS;
          case 24: return ClassRelationNone;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<RelationType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          RelationType> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<RelationType>() {
              public RelationType findValueByNumber(int number) {
                return RelationType.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.ClassSig.ClassRelationProto.getDescriptor().getEnumTypes().get(0);
      }

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

      public static RelationType 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 RelationType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:proto.ClassRelationProto.RelationType)
    }

    public interface RelationCounterOrBuilder extends
        // @@protoc_insertion_point(interface_extends:proto.ClassRelationProto.RelationCounter)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>.proto.ClassRelationProto.RelationType relation_type = 1;</code>
       */
      int getRelationTypeValue();
      /**
       * <code>.proto.ClassRelationProto.RelationType relation_type = 1;</code>
       */
      proto.ClassSig.ClassRelationProto.RelationType getRelationType();

      /**
       * <code>int32 relation_count = 2;</code>
       */
      int getRelationCount();
    }
    /**
     * Protobuf type {@code proto.ClassRelationProto.RelationCounter}
     */
    public  static final class RelationCounter extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:proto.ClassRelationProto.RelationCounter)
        RelationCounterOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use RelationCounter.newBuilder() to construct.
      private RelationCounter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private RelationCounter() {
        relationType_ = 0;
        relationCount_ = 0;
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private RelationCounter(
          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();

                relationType_ = rawValue;
                break;
              }
              case 16: {

                relationCount_ = input.readInt32();
                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.ClassSig.internal_static_proto_ClassRelationProto_RelationCounter_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.ClassSig.internal_static_proto_ClassRelationProto_RelationCounter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.ClassSig.ClassRelationProto.RelationCounter.class, proto.ClassSig.ClassRelationProto.RelationCounter.Builder.class);
      }

      public static final int RELATION_TYPE_FIELD_NUMBER = 1;
      private int relationType_;
      /**
       * <code>.proto.ClassRelationProto.RelationType relation_type = 1;</code>
       */
      public int getRelationTypeValue() {
        return relationType_;
      }
      /**
       * <code>.proto.ClassRelationProto.RelationType relation_type = 1;</code>
       */
      public proto.ClassSig.ClassRelationProto.RelationType getRelationType() {
        @SuppressWarnings("deprecation")
        proto.ClassSig.ClassRelationProto.RelationType result = proto.ClassSig.ClassRelationProto.RelationType.valueOf(relationType_);
        return result == null ? proto.ClassSig.ClassRelationProto.RelationType.UNRECOGNIZED : result;
      }

      public static final int RELATION_COUNT_FIELD_NUMBER = 2;
      private int relationCount_;
      /**
       * <code>int32 relation_count = 2;</code>
       */
      public int getRelationCount() {
        return relationCount_;
      }

      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 (relationType_ != proto.ClassSig.ClassRelationProto.RelationType.INHERITANCE.getNumber()) {
          output.writeEnum(1, relationType_);
        }
        if (relationCount_ != 0) {
          output.writeInt32(2, relationCount_);
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        if (relationType_ != proto.ClassSig.ClassRelationProto.RelationType.INHERITANCE.getNumber()) {
          size += com.google.protobuf.CodedOutputStream
            .computeEnumSize(1, relationType_);
        }
        if (relationCount_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(2, relationCount_);
        }
        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.ClassSig.ClassRelationProto.RelationCounter)) {
          return super.equals(obj);
        }
        proto.ClassSig.ClassRelationProto.RelationCounter other = (proto.ClassSig.ClassRelationProto.RelationCounter) obj;

        boolean result = true;
        result = result && relationType_ == other.relationType_;
        result = result && (getRelationCount()
            == other.getRelationCount());
        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) + RELATION_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + relationType_;
        hash = (37 * hash) + RELATION_COUNT_FIELD_NUMBER;
        hash = (53 * hash) + getRelationCount();
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static proto.ClassSig.ClassRelationProto.RelationCounter parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static proto.ClassSig.ClassRelationProto.RelationCounter parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static proto.ClassSig.ClassRelationProto.RelationCounter parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static proto.ClassSig.ClassRelationProto.RelationCounter parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static proto.ClassSig.ClassRelationProto.RelationCounter parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static proto.ClassSig.ClassRelationProto.RelationCounter parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static proto.ClassSig.ClassRelationProto.RelationCounter parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static proto.ClassSig.ClassRelationProto.RelationCounter 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.ClassSig.ClassRelationProto.RelationCounter parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static proto.ClassSig.ClassRelationProto.RelationCounter 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.ClassSig.ClassRelationProto.RelationCounter parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static proto.ClassSig.ClassRelationProto.RelationCounter 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.ClassSig.ClassRelationProto.RelationCounter 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.ClassRelationProto.RelationCounter}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:proto.ClassRelationProto.RelationCounter)
          proto.ClassSig.ClassRelationProto.RelationCounterOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return proto.ClassSig.internal_static_proto_ClassRelationProto_RelationCounter_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return proto.ClassSig.internal_static_proto_ClassRelationProto_RelationCounter_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  proto.ClassSig.ClassRelationProto.RelationCounter.class, proto.ClassSig.ClassRelationProto.RelationCounter.Builder.class);
        }

        // Construct using proto.ClassSig.ClassRelationProto.RelationCounter.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();
          relationType_ = 0;

          relationCount_ = 0;

          return this;
        }

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

        @java.lang.Override
        public proto.ClassSig.ClassRelationProto.RelationCounter getDefaultInstanceForType() {
          return proto.ClassSig.ClassRelationProto.RelationCounter.getDefaultInstance();
        }

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

        @java.lang.Override
        public proto.ClassSig.ClassRelationProto.RelationCounter buildPartial() {
          proto.ClassSig.ClassRelationProto.RelationCounter result = new proto.ClassSig.ClassRelationProto.RelationCounter(this);
          result.relationType_ = relationType_;
          result.relationCount_ = relationCount_;
          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.ClassSig.ClassRelationProto.RelationCounter) {
            return mergeFrom((proto.ClassSig.ClassRelationProto.RelationCounter)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(proto.ClassSig.ClassRelationProto.RelationCounter other) {
          if (other == proto.ClassSig.ClassRelationProto.RelationCounter.getDefaultInstance()) return this;
          if (other.relationType_ != 0) {
            setRelationTypeValue(other.getRelationTypeValue());
          }
          if (other.getRelationCount() != 0) {
            setRelationCount(other.getRelationCount());
          }
          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.ClassSig.ClassRelationProto.RelationCounter parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (proto.ClassSig.ClassRelationProto.RelationCounter) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private int relationType_ = 0;
        /**
         * <code>.proto.ClassRelationProto.RelationType relation_type = 1;</code>
         */
        public int getRelationTypeValue() {
          return relationType_;
        }
        /**
         * <code>.proto.ClassRelationProto.RelationType relation_type = 1;</code>
         */
        public Builder setRelationTypeValue(int value) {
          relationType_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>.proto.ClassRelationProto.RelationType relation_type = 1;</code>
         */
        public proto.ClassSig.ClassRelationProto.RelationType getRelationType() {
          @SuppressWarnings("deprecation")
          proto.ClassSig.ClassRelationProto.RelationType result = proto.ClassSig.ClassRelationProto.RelationType.valueOf(relationType_);
          return result == null ? proto.ClassSig.ClassRelationProto.RelationType.UNRECOGNIZED : result;
        }
        /**
         * <code>.proto.ClassRelationProto.RelationType relation_type = 1;</code>
         */
        public Builder setRelationType(proto.ClassSig.ClassRelationProto.RelationType value) {
          if (value == null) {
            throw new NullPointerException();
          }
          
          relationType_ = value.getNumber();
          onChanged();
          return this;
        }
        /**
         * <code>.proto.ClassRelationProto.RelationType relation_type = 1;</code>
         */
        public Builder clearRelationType() {
          
          relationType_ = 0;
          onChanged();
          return this;
        }

        private int relationCount_ ;
        /**
         * <code>int32 relation_count = 2;</code>
         */
        public int getRelationCount() {
          return relationCount_;
        }
        /**
         * <code>int32 relation_count = 2;</code>
         */
        public Builder setRelationCount(int value) {
          
          relationCount_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>int32 relation_count = 2;</code>
         */
        public Builder clearRelationCount() {
          
          relationCount_ = 0;
          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.ClassRelationProto.RelationCounter)
      }

      // @@protoc_insertion_point(class_scope:proto.ClassRelationProto.RelationCounter)
      private static final proto.ClassSig.ClassRelationProto.RelationCounter DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new proto.ClassSig.ClassRelationProto.RelationCounter();
      }

      public static proto.ClassSig.ClassRelationProto.RelationCounter getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      @java.lang.Override
      public proto.ClassSig.ClassRelationProto.RelationCounter getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int CLASSNAME1_FIELD_NUMBER = 1;
    private volatile java.lang.Object classname1_;
    /**
     * <code>string classname1 = 1;</code>
     */
    public java.lang.String getClassname1() {
      java.lang.Object ref = classname1_;
      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();
        classname1_ = s;
        return s;
      }
    }
    /**
     * <code>string classname1 = 1;</code>
     */
    public com.google.protobuf.ByteString
        getClassname1Bytes() {
      java.lang.Object ref = classname1_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        classname1_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CLASSNAME2_FIELD_NUMBER = 2;
    private volatile java.lang.Object classname2_;
    /**
     * <code>string classname2 = 2;</code>
     */
    public java.lang.String getClassname2() {
      java.lang.Object ref = classname2_;
      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();
        classname2_ = s;
        return s;
      }
    }
    /**
     * <code>string classname2 = 2;</code>
     */
    public com.google.protobuf.ByteString
        getClassname2Bytes() {
      java.lang.Object ref = classname2_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        classname2_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RELATION_COUNTERS_FIELD_NUMBER = 3;
    private java.util.List<proto.ClassSig.ClassRelationProto.RelationCounter> relationCounters_;
    /**
     * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
     */
    public java.util.List<proto.ClassSig.ClassRelationProto.RelationCounter> getRelationCountersList() {
      return relationCounters_;
    }
    /**
     * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
     */
    public java.util.List<? extends proto.ClassSig.ClassRelationProto.RelationCounterOrBuilder> 
        getRelationCountersOrBuilderList() {
      return relationCounters_;
    }
    /**
     * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
     */
    public int getRelationCountersCount() {
      return relationCounters_.size();
    }
    /**
     * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
     */
    public proto.ClassSig.ClassRelationProto.RelationCounter getRelationCounters(int index) {
      return relationCounters_.get(index);
    }
    /**
     * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
     */
    public proto.ClassSig.ClassRelationProto.RelationCounterOrBuilder getRelationCountersOrBuilder(
        int index) {
      return relationCounters_.get(index);
    }

    public static final int CLASSNAME2_IS_APPLICATION_CLASS_FIELD_NUMBER = 4;
    private boolean classname2IsApplicationClass_;
    /**
     * <pre>
     * classname1 is absolutely application class, because we need to inspect the implementation to get
     * the relationship between classname1 and classname2.
     * but classname2 can be non-application classes and can require permissions.
     * </pre>
     *
     * <code>bool classname2_is_application_class = 4;</code>
     */
    public boolean getClassname2IsApplicationClass() {
      return classname2IsApplicationClass_;
    }

    public static final int CLASSNAME2_PERMISSIONS_FIELD_NUMBER = 5;
    private com.google.protobuf.LazyStringList classname2Permissions_;
    /**
     * <pre>
     * classname2 can require permissions, only record this if classname2 is not application class
     * </pre>
     *
     * <code>repeated string classname2_permissions = 5;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getClassname2PermissionsList() {
      return classname2Permissions_;
    }
    /**
     * <pre>
     * classname2 can require permissions, only record this if classname2 is not application class
     * </pre>
     *
     * <code>repeated string classname2_permissions = 5;</code>
     */
    public int getClassname2PermissionsCount() {
      return classname2Permissions_.size();
    }
    /**
     * <pre>
     * classname2 can require permissions, only record this if classname2 is not application class
     * </pre>
     *
     * <code>repeated string classname2_permissions = 5;</code>
     */
    public java.lang.String getClassname2Permissions(int index) {
      return classname2Permissions_.get(index);
    }
    /**
     * <pre>
     * classname2 can require permissions, only record this if classname2 is not application class
     * </pre>
     *
     * <code>repeated string classname2_permissions = 5;</code>
     */
    public com.google.protobuf.ByteString
        getClassname2PermissionsBytes(int index) {
      return classname2Permissions_.getByteString(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 (!getClassname1Bytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, classname1_);
      }
      if (!getClassname2Bytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, classname2_);
      }
      for (int i = 0; i < relationCounters_.size(); i++) {
        output.writeMessage(3, relationCounters_.get(i));
      }
      if (classname2IsApplicationClass_ != false) {
        output.writeBool(4, classname2IsApplicationClass_);
      }
      for (int i = 0; i < classname2Permissions_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, classname2Permissions_.getRaw(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getClassname1Bytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, classname1_);
      }
      if (!getClassname2Bytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, classname2_);
      }
      for (int i = 0; i < relationCounters_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, relationCounters_.get(i));
      }
      if (classname2IsApplicationClass_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, classname2IsApplicationClass_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < classname2Permissions_.size(); i++) {
          dataSize += computeStringSizeNoTag(classname2Permissions_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getClassname2PermissionsList().size();
      }
      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.ClassSig.ClassRelationProto)) {
        return super.equals(obj);
      }
      proto.ClassSig.ClassRelationProto other = (proto.ClassSig.ClassRelationProto) obj;

      boolean result = true;
      result = result && getClassname1()
          .equals(other.getClassname1());
      result = result && getClassname2()
          .equals(other.getClassname2());
      result = result && getRelationCountersList()
          .equals(other.getRelationCountersList());
      result = result && (getClassname2IsApplicationClass()
          == other.getClassname2IsApplicationClass());
      result = result && getClassname2PermissionsList()
          .equals(other.getClassname2PermissionsList());
      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) + CLASSNAME1_FIELD_NUMBER;
      hash = (53 * hash) + getClassname1().hashCode();
      hash = (37 * hash) + CLASSNAME2_FIELD_NUMBER;
      hash = (53 * hash) + getClassname2().hashCode();
      if (getRelationCountersCount() > 0) {
        hash = (37 * hash) + RELATION_COUNTERS_FIELD_NUMBER;
        hash = (53 * hash) + getRelationCountersList().hashCode();
      }
      hash = (37 * hash) + CLASSNAME2_IS_APPLICATION_CLASS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getClassname2IsApplicationClass());
      if (getClassname2PermissionsCount() > 0) {
        hash = (37 * hash) + CLASSNAME2_PERMISSIONS_FIELD_NUMBER;
        hash = (53 * hash) + getClassname2PermissionsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.ClassSig.ClassRelationProto parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.ClassRelationProto parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.ClassRelationProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.ClassRelationProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.ClassRelationProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.ClassRelationProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.ClassRelationProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.ClassRelationProto 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.ClassSig.ClassRelationProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.ClassSig.ClassRelationProto 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.ClassSig.ClassRelationProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.ClassRelationProto 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.ClassSig.ClassRelationProto 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.ClassRelationProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.ClassRelationProto)
        proto.ClassSig.ClassRelationProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.ClassSig.internal_static_proto_ClassRelationProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.ClassSig.internal_static_proto_ClassRelationProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.ClassSig.ClassRelationProto.class, proto.ClassSig.ClassRelationProto.Builder.class);
      }

      // Construct using proto.ClassSig.ClassRelationProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

        classname2_ = "";

        if (relationCountersBuilder_ == null) {
          relationCounters_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          relationCountersBuilder_.clear();
        }
        classname2IsApplicationClass_ = false;

        classname2Permissions_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

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

      @java.lang.Override
      public proto.ClassSig.ClassRelationProto getDefaultInstanceForType() {
        return proto.ClassSig.ClassRelationProto.getDefaultInstance();
      }

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

      @java.lang.Override
      public proto.ClassSig.ClassRelationProto buildPartial() {
        proto.ClassSig.ClassRelationProto result = new proto.ClassSig.ClassRelationProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.classname1_ = classname1_;
        result.classname2_ = classname2_;
        if (relationCountersBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            relationCounters_ = java.util.Collections.unmodifiableList(relationCounters_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.relationCounters_ = relationCounters_;
        } else {
          result.relationCounters_ = relationCountersBuilder_.build();
        }
        result.classname2IsApplicationClass_ = classname2IsApplicationClass_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          classname2Permissions_ = classname2Permissions_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.classname2Permissions_ = classname2Permissions_;
        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.ClassSig.ClassRelationProto) {
          return mergeFrom((proto.ClassSig.ClassRelationProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.ClassSig.ClassRelationProto other) {
        if (other == proto.ClassSig.ClassRelationProto.getDefaultInstance()) return this;
        if (!other.getClassname1().isEmpty()) {
          classname1_ = other.classname1_;
          onChanged();
        }
        if (!other.getClassname2().isEmpty()) {
          classname2_ = other.classname2_;
          onChanged();
        }
        if (relationCountersBuilder_ == null) {
          if (!other.relationCounters_.isEmpty()) {
            if (relationCounters_.isEmpty()) {
              relationCounters_ = other.relationCounters_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureRelationCountersIsMutable();
              relationCounters_.addAll(other.relationCounters_);
            }
            onChanged();
          }
        } else {
          if (!other.relationCounters_.isEmpty()) {
            if (relationCountersBuilder_.isEmpty()) {
              relationCountersBuilder_.dispose();
              relationCountersBuilder_ = null;
              relationCounters_ = other.relationCounters_;
              bitField0_ = (bitField0_ & ~0x00000004);
              relationCountersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getRelationCountersFieldBuilder() : null;
            } else {
              relationCountersBuilder_.addAllMessages(other.relationCounters_);
            }
          }
        }
        if (other.getClassname2IsApplicationClass() != false) {
          setClassname2IsApplicationClass(other.getClassname2IsApplicationClass());
        }
        if (!other.classname2Permissions_.isEmpty()) {
          if (classname2Permissions_.isEmpty()) {
            classname2Permissions_ = other.classname2Permissions_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureClassname2PermissionsIsMutable();
            classname2Permissions_.addAll(other.classname2Permissions_);
          }
          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.ClassSig.ClassRelationProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.ClassSig.ClassRelationProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object classname1_ = "";
      /**
       * <code>string classname1 = 1;</code>
       */
      public java.lang.String getClassname1() {
        java.lang.Object ref = classname1_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          classname1_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string classname1 = 1;</code>
       */
      public com.google.protobuf.ByteString
          getClassname1Bytes() {
        java.lang.Object ref = classname1_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          classname1_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string classname1 = 1;</code>
       */
      public Builder setClassname1(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        classname1_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string classname1 = 1;</code>
       */
      public Builder clearClassname1() {
        
        classname1_ = getDefaultInstance().getClassname1();
        onChanged();
        return this;
      }
      /**
       * <code>string classname1 = 1;</code>
       */
      public Builder setClassname1Bytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        classname1_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object classname2_ = "";
      /**
       * <code>string classname2 = 2;</code>
       */
      public java.lang.String getClassname2() {
        java.lang.Object ref = classname2_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          classname2_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string classname2 = 2;</code>
       */
      public com.google.protobuf.ByteString
          getClassname2Bytes() {
        java.lang.Object ref = classname2_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          classname2_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string classname2 = 2;</code>
       */
      public Builder setClassname2(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        classname2_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string classname2 = 2;</code>
       */
      public Builder clearClassname2() {
        
        classname2_ = getDefaultInstance().getClassname2();
        onChanged();
        return this;
      }
      /**
       * <code>string classname2 = 2;</code>
       */
      public Builder setClassname2Bytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        classname2_ = value;
        onChanged();
        return this;
      }

      private java.util.List<proto.ClassSig.ClassRelationProto.RelationCounter> relationCounters_ =
        java.util.Collections.emptyList();
      private void ensureRelationCountersIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          relationCounters_ = new java.util.ArrayList<proto.ClassSig.ClassRelationProto.RelationCounter>(relationCounters_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.ClassRelationProto.RelationCounter, proto.ClassSig.ClassRelationProto.RelationCounter.Builder, proto.ClassSig.ClassRelationProto.RelationCounterOrBuilder> relationCountersBuilder_;

      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public java.util.List<proto.ClassSig.ClassRelationProto.RelationCounter> getRelationCountersList() {
        if (relationCountersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(relationCounters_);
        } else {
          return relationCountersBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public int getRelationCountersCount() {
        if (relationCountersBuilder_ == null) {
          return relationCounters_.size();
        } else {
          return relationCountersBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public proto.ClassSig.ClassRelationProto.RelationCounter getRelationCounters(int index) {
        if (relationCountersBuilder_ == null) {
          return relationCounters_.get(index);
        } else {
          return relationCountersBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public Builder setRelationCounters(
          int index, proto.ClassSig.ClassRelationProto.RelationCounter value) {
        if (relationCountersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRelationCountersIsMutable();
          relationCounters_.set(index, value);
          onChanged();
        } else {
          relationCountersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public Builder setRelationCounters(
          int index, proto.ClassSig.ClassRelationProto.RelationCounter.Builder builderForValue) {
        if (relationCountersBuilder_ == null) {
          ensureRelationCountersIsMutable();
          relationCounters_.set(index, builderForValue.build());
          onChanged();
        } else {
          relationCountersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public Builder addRelationCounters(proto.ClassSig.ClassRelationProto.RelationCounter value) {
        if (relationCountersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRelationCountersIsMutable();
          relationCounters_.add(value);
          onChanged();
        } else {
          relationCountersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public Builder addRelationCounters(
          int index, proto.ClassSig.ClassRelationProto.RelationCounter value) {
        if (relationCountersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRelationCountersIsMutable();
          relationCounters_.add(index, value);
          onChanged();
        } else {
          relationCountersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public Builder addRelationCounters(
          proto.ClassSig.ClassRelationProto.RelationCounter.Builder builderForValue) {
        if (relationCountersBuilder_ == null) {
          ensureRelationCountersIsMutable();
          relationCounters_.add(builderForValue.build());
          onChanged();
        } else {
          relationCountersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public Builder addRelationCounters(
          int index, proto.ClassSig.ClassRelationProto.RelationCounter.Builder builderForValue) {
        if (relationCountersBuilder_ == null) {
          ensureRelationCountersIsMutable();
          relationCounters_.add(index, builderForValue.build());
          onChanged();
        } else {
          relationCountersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public Builder addAllRelationCounters(
          java.lang.Iterable<? extends proto.ClassSig.ClassRelationProto.RelationCounter> values) {
        if (relationCountersBuilder_ == null) {
          ensureRelationCountersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, relationCounters_);
          onChanged();
        } else {
          relationCountersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public Builder clearRelationCounters() {
        if (relationCountersBuilder_ == null) {
          relationCounters_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          relationCountersBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public Builder removeRelationCounters(int index) {
        if (relationCountersBuilder_ == null) {
          ensureRelationCountersIsMutable();
          relationCounters_.remove(index);
          onChanged();
        } else {
          relationCountersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public proto.ClassSig.ClassRelationProto.RelationCounter.Builder getRelationCountersBuilder(
          int index) {
        return getRelationCountersFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public proto.ClassSig.ClassRelationProto.RelationCounterOrBuilder getRelationCountersOrBuilder(
          int index) {
        if (relationCountersBuilder_ == null) {
          return relationCounters_.get(index);  } else {
          return relationCountersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public java.util.List<? extends proto.ClassSig.ClassRelationProto.RelationCounterOrBuilder> 
           getRelationCountersOrBuilderList() {
        if (relationCountersBuilder_ != null) {
          return relationCountersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(relationCounters_);
        }
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public proto.ClassSig.ClassRelationProto.RelationCounter.Builder addRelationCountersBuilder() {
        return getRelationCountersFieldBuilder().addBuilder(
            proto.ClassSig.ClassRelationProto.RelationCounter.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public proto.ClassSig.ClassRelationProto.RelationCounter.Builder addRelationCountersBuilder(
          int index) {
        return getRelationCountersFieldBuilder().addBuilder(
            index, proto.ClassSig.ClassRelationProto.RelationCounter.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ClassRelationProto.RelationCounter relation_counters = 3;</code>
       */
      public java.util.List<proto.ClassSig.ClassRelationProto.RelationCounter.Builder> 
           getRelationCountersBuilderList() {
        return getRelationCountersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.ClassRelationProto.RelationCounter, proto.ClassSig.ClassRelationProto.RelationCounter.Builder, proto.ClassSig.ClassRelationProto.RelationCounterOrBuilder> 
          getRelationCountersFieldBuilder() {
        if (relationCountersBuilder_ == null) {
          relationCountersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.ClassSig.ClassRelationProto.RelationCounter, proto.ClassSig.ClassRelationProto.RelationCounter.Builder, proto.ClassSig.ClassRelationProto.RelationCounterOrBuilder>(
                  relationCounters_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          relationCounters_ = null;
        }
        return relationCountersBuilder_;
      }

      private boolean classname2IsApplicationClass_ ;
      /**
       * <pre>
       * classname1 is absolutely application class, because we need to inspect the implementation to get
       * the relationship between classname1 and classname2.
       * but classname2 can be non-application classes and can require permissions.
       * </pre>
       *
       * <code>bool classname2_is_application_class = 4;</code>
       */
      public boolean getClassname2IsApplicationClass() {
        return classname2IsApplicationClass_;
      }
      /**
       * <pre>
       * classname1 is absolutely application class, because we need to inspect the implementation to get
       * the relationship between classname1 and classname2.
       * but classname2 can be non-application classes and can require permissions.
       * </pre>
       *
       * <code>bool classname2_is_application_class = 4;</code>
       */
      public Builder setClassname2IsApplicationClass(boolean value) {
        
        classname2IsApplicationClass_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * classname1 is absolutely application class, because we need to inspect the implementation to get
       * the relationship between classname1 and classname2.
       * but classname2 can be non-application classes and can require permissions.
       * </pre>
       *
       * <code>bool classname2_is_application_class = 4;</code>
       */
      public Builder clearClassname2IsApplicationClass() {
        
        classname2IsApplicationClass_ = false;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList classname2Permissions_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureClassname2PermissionsIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          classname2Permissions_ = new com.google.protobuf.LazyStringArrayList(classname2Permissions_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <pre>
       * classname2 can require permissions, only record this if classname2 is not application class
       * </pre>
       *
       * <code>repeated string classname2_permissions = 5;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getClassname2PermissionsList() {
        return classname2Permissions_.getUnmodifiableView();
      }
      /**
       * <pre>
       * classname2 can require permissions, only record this if classname2 is not application class
       * </pre>
       *
       * <code>repeated string classname2_permissions = 5;</code>
       */
      public int getClassname2PermissionsCount() {
        return classname2Permissions_.size();
      }
      /**
       * <pre>
       * classname2 can require permissions, only record this if classname2 is not application class
       * </pre>
       *
       * <code>repeated string classname2_permissions = 5;</code>
       */
      public java.lang.String getClassname2Permissions(int index) {
        return classname2Permissions_.get(index);
      }
      /**
       * <pre>
       * classname2 can require permissions, only record this if classname2 is not application class
       * </pre>
       *
       * <code>repeated string classname2_permissions = 5;</code>
       */
      public com.google.protobuf.ByteString
          getClassname2PermissionsBytes(int index) {
        return classname2Permissions_.getByteString(index);
      }
      /**
       * <pre>
       * classname2 can require permissions, only record this if classname2 is not application class
       * </pre>
       *
       * <code>repeated string classname2_permissions = 5;</code>
       */
      public Builder setClassname2Permissions(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureClassname2PermissionsIsMutable();
        classname2Permissions_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * classname2 can require permissions, only record this if classname2 is not application class
       * </pre>
       *
       * <code>repeated string classname2_permissions = 5;</code>
       */
      public Builder addClassname2Permissions(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureClassname2PermissionsIsMutable();
        classname2Permissions_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * classname2 can require permissions, only record this if classname2 is not application class
       * </pre>
       *
       * <code>repeated string classname2_permissions = 5;</code>
       */
      public Builder addAllClassname2Permissions(
          java.lang.Iterable<java.lang.String> values) {
        ensureClassname2PermissionsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, classname2Permissions_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * classname2 can require permissions, only record this if classname2 is not application class
       * </pre>
       *
       * <code>repeated string classname2_permissions = 5;</code>
       */
      public Builder clearClassname2Permissions() {
        classname2Permissions_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * classname2 can require permissions, only record this if classname2 is not application class
       * </pre>
       *
       * <code>repeated string classname2_permissions = 5;</code>
       */
      public Builder addClassname2PermissionsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureClassname2PermissionsIsMutable();
        classname2Permissions_.add(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.ClassRelationProto)
    }

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

    public static proto.ClassSig.ClassRelationProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.ClassSig.ClassRelationProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

    /**
     * <code>string methodname1 = 1;</code>
     */
    java.lang.String getMethodname1();
    /**
     * <code>string methodname1 = 1;</code>
     */
    com.google.protobuf.ByteString
        getMethodname1Bytes();

    /**
     * <code>string methodname2 = 2;</code>
     */
    java.lang.String getMethodname2();
    /**
     * <code>string methodname2 = 2;</code>
     */
    com.google.protobuf.ByteString
        getMethodname2Bytes();
  }
  /**
   * Protobuf type {@code proto.MethodRelationProto}
   */
  public  static final class MethodRelationProto extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.MethodRelationProto)
      MethodRelationProtoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use MethodRelationProto.newBuilder() to construct.
    private MethodRelationProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private MethodRelationProto() {
      methodname1_ = "";
      methodname2_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private MethodRelationProto(
        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();

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

              methodname2_ = 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.ClassSig.internal_static_proto_MethodRelationProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.ClassSig.internal_static_proto_MethodRelationProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.ClassSig.MethodRelationProto.class, proto.ClassSig.MethodRelationProto.Builder.class);
    }

    public static final int METHODNAME1_FIELD_NUMBER = 1;
    private volatile java.lang.Object methodname1_;
    /**
     * <code>string methodname1 = 1;</code>
     */
    public java.lang.String getMethodname1() {
      java.lang.Object ref = methodname1_;
      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();
        methodname1_ = s;
        return s;
      }
    }
    /**
     * <code>string methodname1 = 1;</code>
     */
    public com.google.protobuf.ByteString
        getMethodname1Bytes() {
      java.lang.Object ref = methodname1_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        methodname1_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int METHODNAME2_FIELD_NUMBER = 2;
    private volatile java.lang.Object methodname2_;
    /**
     * <code>string methodname2 = 2;</code>
     */
    public java.lang.String getMethodname2() {
      java.lang.Object ref = methodname2_;
      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();
        methodname2_ = s;
        return s;
      }
    }
    /**
     * <code>string methodname2 = 2;</code>
     */
    public com.google.protobuf.ByteString
        getMethodname2Bytes() {
      java.lang.Object ref = methodname2_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        methodname2_ = 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 (!getMethodname1Bytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, methodname1_);
      }
      if (!getMethodname2Bytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, methodname2_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getMethodname1Bytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, methodname1_);
      }
      if (!getMethodname2Bytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, methodname2_);
      }
      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.ClassSig.MethodRelationProto)) {
        return super.equals(obj);
      }
      proto.ClassSig.MethodRelationProto other = (proto.ClassSig.MethodRelationProto) obj;

      boolean result = true;
      result = result && getMethodname1()
          .equals(other.getMethodname1());
      result = result && getMethodname2()
          .equals(other.getMethodname2());
      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) + METHODNAME1_FIELD_NUMBER;
      hash = (53 * hash) + getMethodname1().hashCode();
      hash = (37 * hash) + METHODNAME2_FIELD_NUMBER;
      hash = (53 * hash) + getMethodname2().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.ClassSig.MethodRelationProto parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.MethodRelationProto parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.MethodRelationProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.MethodRelationProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.MethodRelationProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.MethodRelationProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.MethodRelationProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.MethodRelationProto 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.ClassSig.MethodRelationProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.ClassSig.MethodRelationProto 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.ClassSig.MethodRelationProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.MethodRelationProto 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.ClassSig.MethodRelationProto 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.MethodRelationProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.MethodRelationProto)
        proto.ClassSig.MethodRelationProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.ClassSig.internal_static_proto_MethodRelationProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.ClassSig.internal_static_proto_MethodRelationProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.ClassSig.MethodRelationProto.class, proto.ClassSig.MethodRelationProto.Builder.class);
      }

      // Construct using proto.ClassSig.MethodRelationProto.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();
        methodname1_ = "";

        methodname2_ = "";

        return this;
      }

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

      @java.lang.Override
      public proto.ClassSig.MethodRelationProto getDefaultInstanceForType() {
        return proto.ClassSig.MethodRelationProto.getDefaultInstance();
      }

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

      @java.lang.Override
      public proto.ClassSig.MethodRelationProto buildPartial() {
        proto.ClassSig.MethodRelationProto result = new proto.ClassSig.MethodRelationProto(this);
        result.methodname1_ = methodname1_;
        result.methodname2_ = methodname2_;
        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.ClassSig.MethodRelationProto) {
          return mergeFrom((proto.ClassSig.MethodRelationProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.ClassSig.MethodRelationProto other) {
        if (other == proto.ClassSig.MethodRelationProto.getDefaultInstance()) return this;
        if (!other.getMethodname1().isEmpty()) {
          methodname1_ = other.methodname1_;
          onChanged();
        }
        if (!other.getMethodname2().isEmpty()) {
          methodname2_ = other.methodname2_;
          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.ClassSig.MethodRelationProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.ClassSig.MethodRelationProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object methodname1_ = "";
      /**
       * <code>string methodname1 = 1;</code>
       */
      public java.lang.String getMethodname1() {
        java.lang.Object ref = methodname1_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          methodname1_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string methodname1 = 1;</code>
       */
      public com.google.protobuf.ByteString
          getMethodname1Bytes() {
        java.lang.Object ref = methodname1_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          methodname1_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string methodname1 = 1;</code>
       */
      public Builder setMethodname1(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        methodname1_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string methodname1 = 1;</code>
       */
      public Builder clearMethodname1() {
        
        methodname1_ = getDefaultInstance().getMethodname1();
        onChanged();
        return this;
      }
      /**
       * <code>string methodname1 = 1;</code>
       */
      public Builder setMethodname1Bytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        methodname1_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object methodname2_ = "";
      /**
       * <code>string methodname2 = 2;</code>
       */
      public java.lang.String getMethodname2() {
        java.lang.Object ref = methodname2_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          methodname2_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string methodname2 = 2;</code>
       */
      public com.google.protobuf.ByteString
          getMethodname2Bytes() {
        java.lang.Object ref = methodname2_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          methodname2_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string methodname2 = 2;</code>
       */
      public Builder setMethodname2(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        methodname2_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string methodname2 = 2;</code>
       */
      public Builder clearMethodname2() {
        
        methodname2_ = getDefaultInstance().getMethodname2();
        onChanged();
        return this;
      }
      /**
       * <code>string methodname2 = 2;</code>
       */
      public Builder setMethodname2Bytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        methodname2_ = 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.MethodRelationProto)
    }

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

    public static proto.ClassSig.MethodRelationProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.ClassSig.MethodRelationProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

    /**
     * <code>string classname1 = 1;</code>
     */
    java.lang.String getClassname1();
    /**
     * <code>string classname1 = 1;</code>
     */
    com.google.protobuf.ByteString
        getClassname1Bytes();

    /**
     * <code>string methodname2 = 2;</code>
     */
    java.lang.String getMethodname2();
    /**
     * <code>string methodname2 = 2;</code>
     */
    com.google.protobuf.ByteString
        getMethodname2Bytes();
  }
  /**
   * Protobuf type {@code proto.ClassMethodRelationProto}
   */
  public  static final class ClassMethodRelationProto extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.ClassMethodRelationProto)
      ClassMethodRelationProtoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ClassMethodRelationProto.newBuilder() to construct.
    private ClassMethodRelationProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ClassMethodRelationProto() {
      classname1_ = "";
      methodname2_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ClassMethodRelationProto(
        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();

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

              methodname2_ = 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.ClassSig.internal_static_proto_ClassMethodRelationProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.ClassSig.internal_static_proto_ClassMethodRelationProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.ClassSig.ClassMethodRelationProto.class, proto.ClassSig.ClassMethodRelationProto.Builder.class);
    }

    public static final int CLASSNAME1_FIELD_NUMBER = 1;
    private volatile java.lang.Object classname1_;
    /**
     * <code>string classname1 = 1;</code>
     */
    public java.lang.String getClassname1() {
      java.lang.Object ref = classname1_;
      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();
        classname1_ = s;
        return s;
      }
    }
    /**
     * <code>string classname1 = 1;</code>
     */
    public com.google.protobuf.ByteString
        getClassname1Bytes() {
      java.lang.Object ref = classname1_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        classname1_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int METHODNAME2_FIELD_NUMBER = 2;
    private volatile java.lang.Object methodname2_;
    /**
     * <code>string methodname2 = 2;</code>
     */
    public java.lang.String getMethodname2() {
      java.lang.Object ref = methodname2_;
      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();
        methodname2_ = s;
        return s;
      }
    }
    /**
     * <code>string methodname2 = 2;</code>
     */
    public com.google.protobuf.ByteString
        getMethodname2Bytes() {
      java.lang.Object ref = methodname2_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        methodname2_ = 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 (!getClassname1Bytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, classname1_);
      }
      if (!getMethodname2Bytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, methodname2_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getClassname1Bytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, classname1_);
      }
      if (!getMethodname2Bytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, methodname2_);
      }
      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.ClassSig.ClassMethodRelationProto)) {
        return super.equals(obj);
      }
      proto.ClassSig.ClassMethodRelationProto other = (proto.ClassSig.ClassMethodRelationProto) obj;

      boolean result = true;
      result = result && getClassname1()
          .equals(other.getClassname1());
      result = result && getMethodname2()
          .equals(other.getMethodname2());
      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) + CLASSNAME1_FIELD_NUMBER;
      hash = (53 * hash) + getClassname1().hashCode();
      hash = (37 * hash) + METHODNAME2_FIELD_NUMBER;
      hash = (53 * hash) + getMethodname2().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.ClassSig.ClassMethodRelationProto parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.ClassMethodRelationProto parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.ClassMethodRelationProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.ClassMethodRelationProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.ClassMethodRelationProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.ClassMethodRelationProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.ClassMethodRelationProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.ClassMethodRelationProto 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.ClassSig.ClassMethodRelationProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.ClassSig.ClassMethodRelationProto 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.ClassSig.ClassMethodRelationProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.ClassMethodRelationProto 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.ClassSig.ClassMethodRelationProto 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.ClassMethodRelationProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.ClassMethodRelationProto)
        proto.ClassSig.ClassMethodRelationProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.ClassSig.internal_static_proto_ClassMethodRelationProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.ClassSig.internal_static_proto_ClassMethodRelationProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.ClassSig.ClassMethodRelationProto.class, proto.ClassSig.ClassMethodRelationProto.Builder.class);
      }

      // Construct using proto.ClassSig.ClassMethodRelationProto.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();
        classname1_ = "";

        methodname2_ = "";

        return this;
      }

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

      @java.lang.Override
      public proto.ClassSig.ClassMethodRelationProto getDefaultInstanceForType() {
        return proto.ClassSig.ClassMethodRelationProto.getDefaultInstance();
      }

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

      @java.lang.Override
      public proto.ClassSig.ClassMethodRelationProto buildPartial() {
        proto.ClassSig.ClassMethodRelationProto result = new proto.ClassSig.ClassMethodRelationProto(this);
        result.classname1_ = classname1_;
        result.methodname2_ = methodname2_;
        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.ClassSig.ClassMethodRelationProto) {
          return mergeFrom((proto.ClassSig.ClassMethodRelationProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.ClassSig.ClassMethodRelationProto other) {
        if (other == proto.ClassSig.ClassMethodRelationProto.getDefaultInstance()) return this;
        if (!other.getClassname1().isEmpty()) {
          classname1_ = other.classname1_;
          onChanged();
        }
        if (!other.getMethodname2().isEmpty()) {
          methodname2_ = other.methodname2_;
          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.ClassSig.ClassMethodRelationProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.ClassSig.ClassMethodRelationProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object classname1_ = "";
      /**
       * <code>string classname1 = 1;</code>
       */
      public java.lang.String getClassname1() {
        java.lang.Object ref = classname1_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          classname1_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string classname1 = 1;</code>
       */
      public com.google.protobuf.ByteString
          getClassname1Bytes() {
        java.lang.Object ref = classname1_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          classname1_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string classname1 = 1;</code>
       */
      public Builder setClassname1(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        classname1_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string classname1 = 1;</code>
       */
      public Builder clearClassname1() {
        
        classname1_ = getDefaultInstance().getClassname1();
        onChanged();
        return this;
      }
      /**
       * <code>string classname1 = 1;</code>
       */
      public Builder setClassname1Bytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        classname1_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object methodname2_ = "";
      /**
       * <code>string methodname2 = 2;</code>
       */
      public java.lang.String getMethodname2() {
        java.lang.Object ref = methodname2_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          methodname2_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string methodname2 = 2;</code>
       */
      public com.google.protobuf.ByteString
          getMethodname2Bytes() {
        java.lang.Object ref = methodname2_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          methodname2_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string methodname2 = 2;</code>
       */
      public Builder setMethodname2(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        methodname2_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string methodname2 = 2;</code>
       */
      public Builder clearMethodname2() {
        
        methodname2_ = getDefaultInstance().getMethodname2();
        onChanged();
        return this;
      }
      /**
       * <code>string methodname2 = 2;</code>
       */
      public Builder setMethodname2Bytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        methodname2_ = 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.ClassMethodRelationProto)
    }

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

    public static proto.ClassSig.ClassMethodRelationProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.ClassSig.ClassMethodRelationProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

    /**
     * <code>string methodname1 = 1;</code>
     */
    java.lang.String getMethodname1();
    /**
     * <code>string methodname1 = 1;</code>
     */
    com.google.protobuf.ByteString
        getMethodname1Bytes();

    /**
     * <code>string classname2 = 2;</code>
     */
    java.lang.String getClassname2();
    /**
     * <code>string classname2 = 2;</code>
     */
    com.google.protobuf.ByteString
        getClassname2Bytes();
  }
  /**
   * Protobuf type {@code proto.MethodClassRelationProto}
   */
  public  static final class MethodClassRelationProto extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.MethodClassRelationProto)
      MethodClassRelationProtoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use MethodClassRelationProto.newBuilder() to construct.
    private MethodClassRelationProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private MethodClassRelationProto() {
      methodname1_ = "";
      classname2_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private MethodClassRelationProto(
        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();

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

              classname2_ = 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.ClassSig.internal_static_proto_MethodClassRelationProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.ClassSig.internal_static_proto_MethodClassRelationProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.ClassSig.MethodClassRelationProto.class, proto.ClassSig.MethodClassRelationProto.Builder.class);
    }

    public static final int METHODNAME1_FIELD_NUMBER = 1;
    private volatile java.lang.Object methodname1_;
    /**
     * <code>string methodname1 = 1;</code>
     */
    public java.lang.String getMethodname1() {
      java.lang.Object ref = methodname1_;
      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();
        methodname1_ = s;
        return s;
      }
    }
    /**
     * <code>string methodname1 = 1;</code>
     */
    public com.google.protobuf.ByteString
        getMethodname1Bytes() {
      java.lang.Object ref = methodname1_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        methodname1_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CLASSNAME2_FIELD_NUMBER = 2;
    private volatile java.lang.Object classname2_;
    /**
     * <code>string classname2 = 2;</code>
     */
    public java.lang.String getClassname2() {
      java.lang.Object ref = classname2_;
      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();
        classname2_ = s;
        return s;
      }
    }
    /**
     * <code>string classname2 = 2;</code>
     */
    public com.google.protobuf.ByteString
        getClassname2Bytes() {
      java.lang.Object ref = classname2_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        classname2_ = 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 (!getMethodname1Bytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, methodname1_);
      }
      if (!getClassname2Bytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, classname2_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getMethodname1Bytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, methodname1_);
      }
      if (!getClassname2Bytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, classname2_);
      }
      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.ClassSig.MethodClassRelationProto)) {
        return super.equals(obj);
      }
      proto.ClassSig.MethodClassRelationProto other = (proto.ClassSig.MethodClassRelationProto) obj;

      boolean result = true;
      result = result && getMethodname1()
          .equals(other.getMethodname1());
      result = result && getClassname2()
          .equals(other.getClassname2());
      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) + METHODNAME1_FIELD_NUMBER;
      hash = (53 * hash) + getMethodname1().hashCode();
      hash = (37 * hash) + CLASSNAME2_FIELD_NUMBER;
      hash = (53 * hash) + getClassname2().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.ClassSig.MethodClassRelationProto parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.MethodClassRelationProto parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.MethodClassRelationProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.MethodClassRelationProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.MethodClassRelationProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.MethodClassRelationProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.MethodClassRelationProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.MethodClassRelationProto 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.ClassSig.MethodClassRelationProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.ClassSig.MethodClassRelationProto 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.ClassSig.MethodClassRelationProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.MethodClassRelationProto 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.ClassSig.MethodClassRelationProto 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.MethodClassRelationProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.MethodClassRelationProto)
        proto.ClassSig.MethodClassRelationProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.ClassSig.internal_static_proto_MethodClassRelationProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.ClassSig.internal_static_proto_MethodClassRelationProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.ClassSig.MethodClassRelationProto.class, proto.ClassSig.MethodClassRelationProto.Builder.class);
      }

      // Construct using proto.ClassSig.MethodClassRelationProto.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();
        methodname1_ = "";

        classname2_ = "";

        return this;
      }

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

      @java.lang.Override
      public proto.ClassSig.MethodClassRelationProto getDefaultInstanceForType() {
        return proto.ClassSig.MethodClassRelationProto.getDefaultInstance();
      }

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

      @java.lang.Override
      public proto.ClassSig.MethodClassRelationProto buildPartial() {
        proto.ClassSig.MethodClassRelationProto result = new proto.ClassSig.MethodClassRelationProto(this);
        result.methodname1_ = methodname1_;
        result.classname2_ = classname2_;
        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.ClassSig.MethodClassRelationProto) {
          return mergeFrom((proto.ClassSig.MethodClassRelationProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.ClassSig.MethodClassRelationProto other) {
        if (other == proto.ClassSig.MethodClassRelationProto.getDefaultInstance()) return this;
        if (!other.getMethodname1().isEmpty()) {
          methodname1_ = other.methodname1_;
          onChanged();
        }
        if (!other.getClassname2().isEmpty()) {
          classname2_ = other.classname2_;
          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.ClassSig.MethodClassRelationProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.ClassSig.MethodClassRelationProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object methodname1_ = "";
      /**
       * <code>string methodname1 = 1;</code>
       */
      public java.lang.String getMethodname1() {
        java.lang.Object ref = methodname1_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          methodname1_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string methodname1 = 1;</code>
       */
      public com.google.protobuf.ByteString
          getMethodname1Bytes() {
        java.lang.Object ref = methodname1_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          methodname1_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string methodname1 = 1;</code>
       */
      public Builder setMethodname1(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        methodname1_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string methodname1 = 1;</code>
       */
      public Builder clearMethodname1() {
        
        methodname1_ = getDefaultInstance().getMethodname1();
        onChanged();
        return this;
      }
      /**
       * <code>string methodname1 = 1;</code>
       */
      public Builder setMethodname1Bytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        methodname1_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object classname2_ = "";
      /**
       * <code>string classname2 = 2;</code>
       */
      public java.lang.String getClassname2() {
        java.lang.Object ref = classname2_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          classname2_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string classname2 = 2;</code>
       */
      public com.google.protobuf.ByteString
          getClassname2Bytes() {
        java.lang.Object ref = classname2_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          classname2_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string classname2 = 2;</code>
       */
      public Builder setClassname2(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        classname2_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string classname2 = 2;</code>
       */
      public Builder clearClassname2() {
        
        classname2_ = getDefaultInstance().getClassname2();
        onChanged();
        return this;
      }
      /**
       * <code>string classname2 = 2;</code>
       */
      public Builder setClassname2Bytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        classname2_ = 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.MethodClassRelationProto)
    }

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

    public static proto.ClassSig.MethodClassRelationProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.ClassSig.MethodClassRelationProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PkgClassMethodResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.PkgClassMethodResult)
      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();

    /**
     * <pre>
     * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
     * </pre>
     *
     * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
     */
    java.util.List<proto.ClassSig.ClassAttributeProto> 
        getClassesList();
    /**
     * <pre>
     * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
     * </pre>
     *
     * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
     */
    proto.ClassSig.ClassAttributeProto getClasses(int index);
    /**
     * <pre>
     * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
     * </pre>
     *
     * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
     */
    int getClassesCount();
    /**
     * <pre>
     * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
     * </pre>
     *
     * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
     */
    java.util.List<? extends proto.ClassSig.ClassAttributeProtoOrBuilder> 
        getClassesOrBuilderList();
    /**
     * <pre>
     * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
     * </pre>
     *
     * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
     */
    proto.ClassSig.ClassAttributeProtoOrBuilder getClassesOrBuilder(
        int index);

    /**
     * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
     */
    java.util.List<proto.ClassSig.MethodAttributeProto> 
        getMethodsList();
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
     */
    proto.ClassSig.MethodAttributeProto getMethods(int index);
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
     */
    int getMethodsCount();
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
     */
    java.util.List<? extends proto.ClassSig.MethodAttributeProtoOrBuilder> 
        getMethodsOrBuilderList();
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
     */
    proto.ClassSig.MethodAttributeProtoOrBuilder getMethodsOrBuilder(
        int index);

    /**
     * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
     */
    java.util.List<proto.ClassSig.ClassRelationProto> 
        getClassPairsList();
    /**
     * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
     */
    proto.ClassSig.ClassRelationProto getClassPairs(int index);
    /**
     * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
     */
    int getClassPairsCount();
    /**
     * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
     */
    java.util.List<? extends proto.ClassSig.ClassRelationProtoOrBuilder> 
        getClassPairsOrBuilderList();
    /**
     * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
     */
    proto.ClassSig.ClassRelationProtoOrBuilder getClassPairsOrBuilder(
        int index);

    /**
     * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
     */
    java.util.List<proto.ClassSig.MethodRelationProto> 
        getMethodPairsList();
    /**
     * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
     */
    proto.ClassSig.MethodRelationProto getMethodPairs(int index);
    /**
     * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
     */
    int getMethodPairsCount();
    /**
     * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
     */
    java.util.List<? extends proto.ClassSig.MethodRelationProtoOrBuilder> 
        getMethodPairsOrBuilderList();
    /**
     * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
     */
    proto.ClassSig.MethodRelationProtoOrBuilder getMethodPairsOrBuilder(
        int index);

    /**
     * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
     */
    java.util.List<proto.ClassSig.ClassMethodRelationProto> 
        getClassMethodPairsList();
    /**
     * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
     */
    proto.ClassSig.ClassMethodRelationProto getClassMethodPairs(int index);
    /**
     * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
     */
    int getClassMethodPairsCount();
    /**
     * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
     */
    java.util.List<? extends proto.ClassSig.ClassMethodRelationProtoOrBuilder> 
        getClassMethodPairsOrBuilderList();
    /**
     * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
     */
    proto.ClassSig.ClassMethodRelationProtoOrBuilder getClassMethodPairsOrBuilder(
        int index);

    /**
     * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
     */
    java.util.List<proto.ClassSig.MethodClassRelationProto> 
        getMethodClassPairsList();
    /**
     * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
     */
    proto.ClassSig.MethodClassRelationProto getMethodClassPairs(int index);
    /**
     * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
     */
    int getMethodClassPairsCount();
    /**
     * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
     */
    java.util.List<? extends proto.ClassSig.MethodClassRelationProtoOrBuilder> 
        getMethodClassPairsOrBuilderList();
    /**
     * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
     */
    proto.ClassSig.MethodClassRelationProtoOrBuilder getMethodClassPairsOrBuilder(
        int index);

    /**
     * <code>uint64 timestamp = 11;</code>
     */
    long getTimestamp();
  }
  /**
   * Protobuf type {@code proto.PkgClassMethodResult}
   */
  public  static final class PkgClassMethodResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.PkgClassMethodResult)
      PkgClassMethodResultOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PkgClassMethodResult.newBuilder() to construct.
    private PkgClassMethodResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PkgClassMethodResult() {
      pkgName_ = "";
      pkgVersion_ = "";
      language_ = 0;
      inputPath_ = "";
      classes_ = java.util.Collections.emptyList();
      methods_ = java.util.Collections.emptyList();
      classPairs_ = java.util.Collections.emptyList();
      methodPairs_ = java.util.Collections.emptyList();
      classMethodPairs_ = java.util.Collections.emptyList();
      methodClassPairs_ = java.util.Collections.emptyList();
      timestamp_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private PkgClassMethodResult(
        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: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                classes_ = new java.util.ArrayList<proto.ClassSig.ClassAttributeProto>();
                mutable_bitField0_ |= 0x00000010;
              }
              classes_.add(
                  input.readMessage(proto.ClassSig.ClassAttributeProto.parser(), extensionRegistry));
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                methods_ = new java.util.ArrayList<proto.ClassSig.MethodAttributeProto>();
                mutable_bitField0_ |= 0x00000020;
              }
              methods_.add(
                  input.readMessage(proto.ClassSig.MethodAttributeProto.parser(), extensionRegistry));
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                classPairs_ = new java.util.ArrayList<proto.ClassSig.ClassRelationProto>();
                mutable_bitField0_ |= 0x00000040;
              }
              classPairs_.add(
                  input.readMessage(proto.ClassSig.ClassRelationProto.parser(), extensionRegistry));
              break;
            }
            case 66: {
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                methodPairs_ = new java.util.ArrayList<proto.ClassSig.MethodRelationProto>();
                mutable_bitField0_ |= 0x00000080;
              }
              methodPairs_.add(
                  input.readMessage(proto.ClassSig.MethodRelationProto.parser(), extensionRegistry));
              break;
            }
            case 74: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                classMethodPairs_ = new java.util.ArrayList<proto.ClassSig.ClassMethodRelationProto>();
                mutable_bitField0_ |= 0x00000100;
              }
              classMethodPairs_.add(
                  input.readMessage(proto.ClassSig.ClassMethodRelationProto.parser(), extensionRegistry));
              break;
            }
            case 82: {
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                methodClassPairs_ = new java.util.ArrayList<proto.ClassSig.MethodClassRelationProto>();
                mutable_bitField0_ |= 0x00000200;
              }
              methodClassPairs_.add(
                  input.readMessage(proto.ClassSig.MethodClassRelationProto.parser(), extensionRegistry));
              break;
            }
            case 88: {

              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_ & 0x00000010) == 0x00000010)) {
          classes_ = java.util.Collections.unmodifiableList(classes_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          methods_ = java.util.Collections.unmodifiableList(methods_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          classPairs_ = java.util.Collections.unmodifiableList(classPairs_);
        }
        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
          methodPairs_ = java.util.Collections.unmodifiableList(methodPairs_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          classMethodPairs_ = java.util.Collections.unmodifiableList(classMethodPairs_);
        }
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          methodClassPairs_ = java.util.Collections.unmodifiableList(methodClassPairs_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.ClassSig.internal_static_proto_PkgClassMethodResult_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.ClassSig.internal_static_proto_PkgClassMethodResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.ClassSig.PkgClassMethodResult.class, proto.ClassSig.PkgClassMethodResult.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 CLASSES_FIELD_NUMBER = 5;
    private java.util.List<proto.ClassSig.ClassAttributeProto> classes_;
    /**
     * <pre>
     * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
     * </pre>
     *
     * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
     */
    public java.util.List<proto.ClassSig.ClassAttributeProto> getClassesList() {
      return classes_;
    }
    /**
     * <pre>
     * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
     * </pre>
     *
     * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
     */
    public java.util.List<? extends proto.ClassSig.ClassAttributeProtoOrBuilder> 
        getClassesOrBuilderList() {
      return classes_;
    }
    /**
     * <pre>
     * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
     * </pre>
     *
     * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
     */
    public int getClassesCount() {
      return classes_.size();
    }
    /**
     * <pre>
     * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
     * </pre>
     *
     * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
     */
    public proto.ClassSig.ClassAttributeProto getClasses(int index) {
      return classes_.get(index);
    }
    /**
     * <pre>
     * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
     * </pre>
     *
     * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
     */
    public proto.ClassSig.ClassAttributeProtoOrBuilder getClassesOrBuilder(
        int index) {
      return classes_.get(index);
    }

    public static final int METHODS_FIELD_NUMBER = 6;
    private java.util.List<proto.ClassSig.MethodAttributeProto> methods_;
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
     */
    public java.util.List<proto.ClassSig.MethodAttributeProto> getMethodsList() {
      return methods_;
    }
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
     */
    public java.util.List<? extends proto.ClassSig.MethodAttributeProtoOrBuilder> 
        getMethodsOrBuilderList() {
      return methods_;
    }
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
     */
    public int getMethodsCount() {
      return methods_.size();
    }
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
     */
    public proto.ClassSig.MethodAttributeProto getMethods(int index) {
      return methods_.get(index);
    }
    /**
     * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
     */
    public proto.ClassSig.MethodAttributeProtoOrBuilder getMethodsOrBuilder(
        int index) {
      return methods_.get(index);
    }

    public static final int CLASS_PAIRS_FIELD_NUMBER = 7;
    private java.util.List<proto.ClassSig.ClassRelationProto> classPairs_;
    /**
     * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
     */
    public java.util.List<proto.ClassSig.ClassRelationProto> getClassPairsList() {
      return classPairs_;
    }
    /**
     * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
     */
    public java.util.List<? extends proto.ClassSig.ClassRelationProtoOrBuilder> 
        getClassPairsOrBuilderList() {
      return classPairs_;
    }
    /**
     * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
     */
    public int getClassPairsCount() {
      return classPairs_.size();
    }
    /**
     * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
     */
    public proto.ClassSig.ClassRelationProto getClassPairs(int index) {
      return classPairs_.get(index);
    }
    /**
     * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
     */
    public proto.ClassSig.ClassRelationProtoOrBuilder getClassPairsOrBuilder(
        int index) {
      return classPairs_.get(index);
    }

    public static final int METHOD_PAIRS_FIELD_NUMBER = 8;
    private java.util.List<proto.ClassSig.MethodRelationProto> methodPairs_;
    /**
     * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
     */
    public java.util.List<proto.ClassSig.MethodRelationProto> getMethodPairsList() {
      return methodPairs_;
    }
    /**
     * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
     */
    public java.util.List<? extends proto.ClassSig.MethodRelationProtoOrBuilder> 
        getMethodPairsOrBuilderList() {
      return methodPairs_;
    }
    /**
     * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
     */
    public int getMethodPairsCount() {
      return methodPairs_.size();
    }
    /**
     * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
     */
    public proto.ClassSig.MethodRelationProto getMethodPairs(int index) {
      return methodPairs_.get(index);
    }
    /**
     * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
     */
    public proto.ClassSig.MethodRelationProtoOrBuilder getMethodPairsOrBuilder(
        int index) {
      return methodPairs_.get(index);
    }

    public static final int CLASS_METHOD_PAIRS_FIELD_NUMBER = 9;
    private java.util.List<proto.ClassSig.ClassMethodRelationProto> classMethodPairs_;
    /**
     * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
     */
    public java.util.List<proto.ClassSig.ClassMethodRelationProto> getClassMethodPairsList() {
      return classMethodPairs_;
    }
    /**
     * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
     */
    public java.util.List<? extends proto.ClassSig.ClassMethodRelationProtoOrBuilder> 
        getClassMethodPairsOrBuilderList() {
      return classMethodPairs_;
    }
    /**
     * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
     */
    public int getClassMethodPairsCount() {
      return classMethodPairs_.size();
    }
    /**
     * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
     */
    public proto.ClassSig.ClassMethodRelationProto getClassMethodPairs(int index) {
      return classMethodPairs_.get(index);
    }
    /**
     * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
     */
    public proto.ClassSig.ClassMethodRelationProtoOrBuilder getClassMethodPairsOrBuilder(
        int index) {
      return classMethodPairs_.get(index);
    }

    public static final int METHOD_CLASS_PAIRS_FIELD_NUMBER = 10;
    private java.util.List<proto.ClassSig.MethodClassRelationProto> methodClassPairs_;
    /**
     * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
     */
    public java.util.List<proto.ClassSig.MethodClassRelationProto> getMethodClassPairsList() {
      return methodClassPairs_;
    }
    /**
     * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
     */
    public java.util.List<? extends proto.ClassSig.MethodClassRelationProtoOrBuilder> 
        getMethodClassPairsOrBuilderList() {
      return methodClassPairs_;
    }
    /**
     * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
     */
    public int getMethodClassPairsCount() {
      return methodClassPairs_.size();
    }
    /**
     * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
     */
    public proto.ClassSig.MethodClassRelationProto getMethodClassPairs(int index) {
      return methodClassPairs_.get(index);
    }
    /**
     * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
     */
    public proto.ClassSig.MethodClassRelationProtoOrBuilder getMethodClassPairsOrBuilder(
        int index) {
      return methodClassPairs_.get(index);
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 11;
    private long timestamp_;
    /**
     * <code>uint64 timestamp = 11;</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 {
      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_);
      }
      for (int i = 0; i < classes_.size(); i++) {
        output.writeMessage(5, classes_.get(i));
      }
      for (int i = 0; i < methods_.size(); i++) {
        output.writeMessage(6, methods_.get(i));
      }
      for (int i = 0; i < classPairs_.size(); i++) {
        output.writeMessage(7, classPairs_.get(i));
      }
      for (int i = 0; i < methodPairs_.size(); i++) {
        output.writeMessage(8, methodPairs_.get(i));
      }
      for (int i = 0; i < classMethodPairs_.size(); i++) {
        output.writeMessage(9, classMethodPairs_.get(i));
      }
      for (int i = 0; i < methodClassPairs_.size(); i++) {
        output.writeMessage(10, methodClassPairs_.get(i));
      }
      if (timestamp_ != 0L) {
        output.writeUInt64(11, timestamp_);
      }
      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_);
      }
      for (int i = 0; i < classes_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, classes_.get(i));
      }
      for (int i = 0; i < methods_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, methods_.get(i));
      }
      for (int i = 0; i < classPairs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, classPairs_.get(i));
      }
      for (int i = 0; i < methodPairs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, methodPairs_.get(i));
      }
      for (int i = 0; i < classMethodPairs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, classMethodPairs_.get(i));
      }
      for (int i = 0; i < methodClassPairs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, methodClassPairs_.get(i));
      }
      if (timestamp_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(11, 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.ClassSig.PkgClassMethodResult)) {
        return super.equals(obj);
      }
      proto.ClassSig.PkgClassMethodResult other = (proto.ClassSig.PkgClassMethodResult) 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 && getClassesList()
          .equals(other.getClassesList());
      result = result && getMethodsList()
          .equals(other.getMethodsList());
      result = result && getClassPairsList()
          .equals(other.getClassPairsList());
      result = result && getMethodPairsList()
          .equals(other.getMethodPairsList());
      result = result && getClassMethodPairsList()
          .equals(other.getClassMethodPairsList());
      result = result && getMethodClassPairsList()
          .equals(other.getMethodClassPairsList());
      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();
      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 (getClassesCount() > 0) {
        hash = (37 * hash) + CLASSES_FIELD_NUMBER;
        hash = (53 * hash) + getClassesList().hashCode();
      }
      if (getMethodsCount() > 0) {
        hash = (37 * hash) + METHODS_FIELD_NUMBER;
        hash = (53 * hash) + getMethodsList().hashCode();
      }
      if (getClassPairsCount() > 0) {
        hash = (37 * hash) + CLASS_PAIRS_FIELD_NUMBER;
        hash = (53 * hash) + getClassPairsList().hashCode();
      }
      if (getMethodPairsCount() > 0) {
        hash = (37 * hash) + METHOD_PAIRS_FIELD_NUMBER;
        hash = (53 * hash) + getMethodPairsList().hashCode();
      }
      if (getClassMethodPairsCount() > 0) {
        hash = (37 * hash) + CLASS_METHOD_PAIRS_FIELD_NUMBER;
        hash = (53 * hash) + getClassMethodPairsList().hashCode();
      }
      if (getMethodClassPairsCount() > 0) {
        hash = (37 * hash) + METHOD_CLASS_PAIRS_FIELD_NUMBER;
        hash = (53 * hash) + getMethodClassPairsList().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.ClassSig.PkgClassMethodResult parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.PkgClassMethodResult parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.PkgClassMethodResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.PkgClassMethodResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.PkgClassMethodResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.PkgClassMethodResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.PkgClassMethodResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.PkgClassMethodResult 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.ClassSig.PkgClassMethodResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.ClassSig.PkgClassMethodResult 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.ClassSig.PkgClassMethodResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.PkgClassMethodResult 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.ClassSig.PkgClassMethodResult 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.PkgClassMethodResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.PkgClassMethodResult)
        proto.ClassSig.PkgClassMethodResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.ClassSig.internal_static_proto_PkgClassMethodResult_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.ClassSig.internal_static_proto_PkgClassMethodResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.ClassSig.PkgClassMethodResult.class, proto.ClassSig.PkgClassMethodResult.Builder.class);
      }

      // Construct using proto.ClassSig.PkgClassMethodResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getClassesFieldBuilder();
          getMethodsFieldBuilder();
          getClassPairsFieldBuilder();
          getMethodPairsFieldBuilder();
          getClassMethodPairsFieldBuilder();
          getMethodClassPairsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        pkgName_ = "";

        pkgVersion_ = "";

        language_ = 0;

        inputPath_ = "";

        if (classesBuilder_ == null) {
          classes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          classesBuilder_.clear();
        }
        if (methodsBuilder_ == null) {
          methods_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          methodsBuilder_.clear();
        }
        if (classPairsBuilder_ == null) {
          classPairs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          classPairsBuilder_.clear();
        }
        if (methodPairsBuilder_ == null) {
          methodPairs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
        } else {
          methodPairsBuilder_.clear();
        }
        if (classMethodPairsBuilder_ == null) {
          classMethodPairs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          classMethodPairsBuilder_.clear();
        }
        if (methodClassPairsBuilder_ == null) {
          methodClassPairs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
        } else {
          methodClassPairsBuilder_.clear();
        }
        timestamp_ = 0L;

        return this;
      }

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

      @java.lang.Override
      public proto.ClassSig.PkgClassMethodResult getDefaultInstanceForType() {
        return proto.ClassSig.PkgClassMethodResult.getDefaultInstance();
      }

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

      @java.lang.Override
      public proto.ClassSig.PkgClassMethodResult buildPartial() {
        proto.ClassSig.PkgClassMethodResult result = new proto.ClassSig.PkgClassMethodResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.pkgName_ = pkgName_;
        result.pkgVersion_ = pkgVersion_;
        result.language_ = language_;
        result.inputPath_ = inputPath_;
        if (classesBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            classes_ = java.util.Collections.unmodifiableList(classes_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.classes_ = classes_;
        } else {
          result.classes_ = classesBuilder_.build();
        }
        if (methodsBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            methods_ = java.util.Collections.unmodifiableList(methods_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.methods_ = methods_;
        } else {
          result.methods_ = methodsBuilder_.build();
        }
        if (classPairsBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            classPairs_ = java.util.Collections.unmodifiableList(classPairs_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.classPairs_ = classPairs_;
        } else {
          result.classPairs_ = classPairsBuilder_.build();
        }
        if (methodPairsBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            methodPairs_ = java.util.Collections.unmodifiableList(methodPairs_);
            bitField0_ = (bitField0_ & ~0x00000080);
          }
          result.methodPairs_ = methodPairs_;
        } else {
          result.methodPairs_ = methodPairsBuilder_.build();
        }
        if (classMethodPairsBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            classMethodPairs_ = java.util.Collections.unmodifiableList(classMethodPairs_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.classMethodPairs_ = classMethodPairs_;
        } else {
          result.classMethodPairs_ = classMethodPairsBuilder_.build();
        }
        if (methodClassPairsBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200)) {
            methodClassPairs_ = java.util.Collections.unmodifiableList(methodClassPairs_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.methodClassPairs_ = methodClassPairs_;
        } else {
          result.methodClassPairs_ = methodClassPairsBuilder_.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.ClassSig.PkgClassMethodResult) {
          return mergeFrom((proto.ClassSig.PkgClassMethodResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.ClassSig.PkgClassMethodResult other) {
        if (other == proto.ClassSig.PkgClassMethodResult.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 (classesBuilder_ == null) {
          if (!other.classes_.isEmpty()) {
            if (classes_.isEmpty()) {
              classes_ = other.classes_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureClassesIsMutable();
              classes_.addAll(other.classes_);
            }
            onChanged();
          }
        } else {
          if (!other.classes_.isEmpty()) {
            if (classesBuilder_.isEmpty()) {
              classesBuilder_.dispose();
              classesBuilder_ = null;
              classes_ = other.classes_;
              bitField0_ = (bitField0_ & ~0x00000010);
              classesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getClassesFieldBuilder() : null;
            } else {
              classesBuilder_.addAllMessages(other.classes_);
            }
          }
        }
        if (methodsBuilder_ == null) {
          if (!other.methods_.isEmpty()) {
            if (methods_.isEmpty()) {
              methods_ = other.methods_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureMethodsIsMutable();
              methods_.addAll(other.methods_);
            }
            onChanged();
          }
        } else {
          if (!other.methods_.isEmpty()) {
            if (methodsBuilder_.isEmpty()) {
              methodsBuilder_.dispose();
              methodsBuilder_ = null;
              methods_ = other.methods_;
              bitField0_ = (bitField0_ & ~0x00000020);
              methodsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMethodsFieldBuilder() : null;
            } else {
              methodsBuilder_.addAllMessages(other.methods_);
            }
          }
        }
        if (classPairsBuilder_ == null) {
          if (!other.classPairs_.isEmpty()) {
            if (classPairs_.isEmpty()) {
              classPairs_ = other.classPairs_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureClassPairsIsMutable();
              classPairs_.addAll(other.classPairs_);
            }
            onChanged();
          }
        } else {
          if (!other.classPairs_.isEmpty()) {
            if (classPairsBuilder_.isEmpty()) {
              classPairsBuilder_.dispose();
              classPairsBuilder_ = null;
              classPairs_ = other.classPairs_;
              bitField0_ = (bitField0_ & ~0x00000040);
              classPairsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getClassPairsFieldBuilder() : null;
            } else {
              classPairsBuilder_.addAllMessages(other.classPairs_);
            }
          }
        }
        if (methodPairsBuilder_ == null) {
          if (!other.methodPairs_.isEmpty()) {
            if (methodPairs_.isEmpty()) {
              methodPairs_ = other.methodPairs_;
              bitField0_ = (bitField0_ & ~0x00000080);
            } else {
              ensureMethodPairsIsMutable();
              methodPairs_.addAll(other.methodPairs_);
            }
            onChanged();
          }
        } else {
          if (!other.methodPairs_.isEmpty()) {
            if (methodPairsBuilder_.isEmpty()) {
              methodPairsBuilder_.dispose();
              methodPairsBuilder_ = null;
              methodPairs_ = other.methodPairs_;
              bitField0_ = (bitField0_ & ~0x00000080);
              methodPairsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMethodPairsFieldBuilder() : null;
            } else {
              methodPairsBuilder_.addAllMessages(other.methodPairs_);
            }
          }
        }
        if (classMethodPairsBuilder_ == null) {
          if (!other.classMethodPairs_.isEmpty()) {
            if (classMethodPairs_.isEmpty()) {
              classMethodPairs_ = other.classMethodPairs_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureClassMethodPairsIsMutable();
              classMethodPairs_.addAll(other.classMethodPairs_);
            }
            onChanged();
          }
        } else {
          if (!other.classMethodPairs_.isEmpty()) {
            if (classMethodPairsBuilder_.isEmpty()) {
              classMethodPairsBuilder_.dispose();
              classMethodPairsBuilder_ = null;
              classMethodPairs_ = other.classMethodPairs_;
              bitField0_ = (bitField0_ & ~0x00000100);
              classMethodPairsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getClassMethodPairsFieldBuilder() : null;
            } else {
              classMethodPairsBuilder_.addAllMessages(other.classMethodPairs_);
            }
          }
        }
        if (methodClassPairsBuilder_ == null) {
          if (!other.methodClassPairs_.isEmpty()) {
            if (methodClassPairs_.isEmpty()) {
              methodClassPairs_ = other.methodClassPairs_;
              bitField0_ = (bitField0_ & ~0x00000200);
            } else {
              ensureMethodClassPairsIsMutable();
              methodClassPairs_.addAll(other.methodClassPairs_);
            }
            onChanged();
          }
        } else {
          if (!other.methodClassPairs_.isEmpty()) {
            if (methodClassPairsBuilder_.isEmpty()) {
              methodClassPairsBuilder_.dispose();
              methodClassPairsBuilder_ = null;
              methodClassPairs_ = other.methodClassPairs_;
              bitField0_ = (bitField0_ & ~0x00000200);
              methodClassPairsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMethodClassPairsFieldBuilder() : null;
            } else {
              methodClassPairsBuilder_.addAllMessages(other.methodClassPairs_);
            }
          }
        }
        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.ClassSig.PkgClassMethodResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.ClassSig.PkgClassMethodResult) 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 java.util.List<proto.ClassSig.ClassAttributeProto> classes_ =
        java.util.Collections.emptyList();
      private void ensureClassesIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          classes_ = new java.util.ArrayList<proto.ClassSig.ClassAttributeProto>(classes_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.ClassAttributeProto, proto.ClassSig.ClassAttributeProto.Builder, proto.ClassSig.ClassAttributeProtoOrBuilder> classesBuilder_;

      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public java.util.List<proto.ClassSig.ClassAttributeProto> getClassesList() {
        if (classesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(classes_);
        } else {
          return classesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public int getClassesCount() {
        if (classesBuilder_ == null) {
          return classes_.size();
        } else {
          return classesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public proto.ClassSig.ClassAttributeProto getClasses(int index) {
        if (classesBuilder_ == null) {
          return classes_.get(index);
        } else {
          return classesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public Builder setClasses(
          int index, proto.ClassSig.ClassAttributeProto value) {
        if (classesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureClassesIsMutable();
          classes_.set(index, value);
          onChanged();
        } else {
          classesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public Builder setClasses(
          int index, proto.ClassSig.ClassAttributeProto.Builder builderForValue) {
        if (classesBuilder_ == null) {
          ensureClassesIsMutable();
          classes_.set(index, builderForValue.build());
          onChanged();
        } else {
          classesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public Builder addClasses(proto.ClassSig.ClassAttributeProto value) {
        if (classesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureClassesIsMutable();
          classes_.add(value);
          onChanged();
        } else {
          classesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public Builder addClasses(
          int index, proto.ClassSig.ClassAttributeProto value) {
        if (classesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureClassesIsMutable();
          classes_.add(index, value);
          onChanged();
        } else {
          classesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public Builder addClasses(
          proto.ClassSig.ClassAttributeProto.Builder builderForValue) {
        if (classesBuilder_ == null) {
          ensureClassesIsMutable();
          classes_.add(builderForValue.build());
          onChanged();
        } else {
          classesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public Builder addClasses(
          int index, proto.ClassSig.ClassAttributeProto.Builder builderForValue) {
        if (classesBuilder_ == null) {
          ensureClassesIsMutable();
          classes_.add(index, builderForValue.build());
          onChanged();
        } else {
          classesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public Builder addAllClasses(
          java.lang.Iterable<? extends proto.ClassSig.ClassAttributeProto> values) {
        if (classesBuilder_ == null) {
          ensureClassesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, classes_);
          onChanged();
        } else {
          classesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public Builder clearClasses() {
        if (classesBuilder_ == null) {
          classes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          classesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public Builder removeClasses(int index) {
        if (classesBuilder_ == null) {
          ensureClassesIsMutable();
          classes_.remove(index);
          onChanged();
        } else {
          classesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public proto.ClassSig.ClassAttributeProto.Builder getClassesBuilder(
          int index) {
        return getClassesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public proto.ClassSig.ClassAttributeProtoOrBuilder getClassesOrBuilder(
          int index) {
        if (classesBuilder_ == null) {
          return classes_.get(index);  } else {
          return classesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public java.util.List<? extends proto.ClassSig.ClassAttributeProtoOrBuilder> 
           getClassesOrBuilderList() {
        if (classesBuilder_ != null) {
          return classesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(classes_);
        }
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public proto.ClassSig.ClassAttributeProto.Builder addClassesBuilder() {
        return getClassesFieldBuilder().addBuilder(
            proto.ClassSig.ClassAttributeProto.getDefaultInstance());
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public proto.ClassSig.ClassAttributeProto.Builder addClassesBuilder(
          int index) {
        return getClassesFieldBuilder().addBuilder(
            index, proto.ClassSig.ClassAttributeProto.getDefaultInstance());
      }
      /**
       * <pre>
       * Generic feature result. Note, java wraps everything in classes, so methods related fields are empty.
       * </pre>
       *
       * <code>repeated .proto.ClassAttributeProto classes = 5;</code>
       */
      public java.util.List<proto.ClassSig.ClassAttributeProto.Builder> 
           getClassesBuilderList() {
        return getClassesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.ClassAttributeProto, proto.ClassSig.ClassAttributeProto.Builder, proto.ClassSig.ClassAttributeProtoOrBuilder> 
          getClassesFieldBuilder() {
        if (classesBuilder_ == null) {
          classesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.ClassSig.ClassAttributeProto, proto.ClassSig.ClassAttributeProto.Builder, proto.ClassSig.ClassAttributeProtoOrBuilder>(
                  classes_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          classes_ = null;
        }
        return classesBuilder_;
      }

      private java.util.List<proto.ClassSig.MethodAttributeProto> methods_ =
        java.util.Collections.emptyList();
      private void ensureMethodsIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          methods_ = new java.util.ArrayList<proto.ClassSig.MethodAttributeProto>(methods_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.MethodAttributeProto, proto.ClassSig.MethodAttributeProto.Builder, proto.ClassSig.MethodAttributeProtoOrBuilder> methodsBuilder_;

      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public java.util.List<proto.ClassSig.MethodAttributeProto> getMethodsList() {
        if (methodsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(methods_);
        } else {
          return methodsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public int getMethodsCount() {
        if (methodsBuilder_ == null) {
          return methods_.size();
        } else {
          return methodsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public proto.ClassSig.MethodAttributeProto getMethods(int index) {
        if (methodsBuilder_ == null) {
          return methods_.get(index);
        } else {
          return methodsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public Builder setMethods(
          int index, proto.ClassSig.MethodAttributeProto value) {
        if (methodsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodsIsMutable();
          methods_.set(index, value);
          onChanged();
        } else {
          methodsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public Builder setMethods(
          int index, proto.ClassSig.MethodAttributeProto.Builder builderForValue) {
        if (methodsBuilder_ == null) {
          ensureMethodsIsMutable();
          methods_.set(index, builderForValue.build());
          onChanged();
        } else {
          methodsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public Builder addMethods(proto.ClassSig.MethodAttributeProto value) {
        if (methodsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodsIsMutable();
          methods_.add(value);
          onChanged();
        } else {
          methodsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public Builder addMethods(
          int index, proto.ClassSig.MethodAttributeProto value) {
        if (methodsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodsIsMutable();
          methods_.add(index, value);
          onChanged();
        } else {
          methodsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public Builder addMethods(
          proto.ClassSig.MethodAttributeProto.Builder builderForValue) {
        if (methodsBuilder_ == null) {
          ensureMethodsIsMutable();
          methods_.add(builderForValue.build());
          onChanged();
        } else {
          methodsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public Builder addMethods(
          int index, proto.ClassSig.MethodAttributeProto.Builder builderForValue) {
        if (methodsBuilder_ == null) {
          ensureMethodsIsMutable();
          methods_.add(index, builderForValue.build());
          onChanged();
        } else {
          methodsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public Builder addAllMethods(
          java.lang.Iterable<? extends proto.ClassSig.MethodAttributeProto> values) {
        if (methodsBuilder_ == null) {
          ensureMethodsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, methods_);
          onChanged();
        } else {
          methodsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public Builder clearMethods() {
        if (methodsBuilder_ == null) {
          methods_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          methodsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public Builder removeMethods(int index) {
        if (methodsBuilder_ == null) {
          ensureMethodsIsMutable();
          methods_.remove(index);
          onChanged();
        } else {
          methodsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public proto.ClassSig.MethodAttributeProto.Builder getMethodsBuilder(
          int index) {
        return getMethodsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public proto.ClassSig.MethodAttributeProtoOrBuilder getMethodsOrBuilder(
          int index) {
        if (methodsBuilder_ == null) {
          return methods_.get(index);  } else {
          return methodsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public java.util.List<? extends proto.ClassSig.MethodAttributeProtoOrBuilder> 
           getMethodsOrBuilderList() {
        if (methodsBuilder_ != null) {
          return methodsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(methods_);
        }
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public proto.ClassSig.MethodAttributeProto.Builder addMethodsBuilder() {
        return getMethodsFieldBuilder().addBuilder(
            proto.ClassSig.MethodAttributeProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public proto.ClassSig.MethodAttributeProto.Builder addMethodsBuilder(
          int index) {
        return getMethodsFieldBuilder().addBuilder(
            index, proto.ClassSig.MethodAttributeProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.MethodAttributeProto methods = 6;</code>
       */
      public java.util.List<proto.ClassSig.MethodAttributeProto.Builder> 
           getMethodsBuilderList() {
        return getMethodsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.MethodAttributeProto, proto.ClassSig.MethodAttributeProto.Builder, proto.ClassSig.MethodAttributeProtoOrBuilder> 
          getMethodsFieldBuilder() {
        if (methodsBuilder_ == null) {
          methodsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.ClassSig.MethodAttributeProto, proto.ClassSig.MethodAttributeProto.Builder, proto.ClassSig.MethodAttributeProtoOrBuilder>(
                  methods_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          methods_ = null;
        }
        return methodsBuilder_;
      }

      private java.util.List<proto.ClassSig.ClassRelationProto> classPairs_ =
        java.util.Collections.emptyList();
      private void ensureClassPairsIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          classPairs_ = new java.util.ArrayList<proto.ClassSig.ClassRelationProto>(classPairs_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.ClassRelationProto, proto.ClassSig.ClassRelationProto.Builder, proto.ClassSig.ClassRelationProtoOrBuilder> classPairsBuilder_;

      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public java.util.List<proto.ClassSig.ClassRelationProto> getClassPairsList() {
        if (classPairsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(classPairs_);
        } else {
          return classPairsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public int getClassPairsCount() {
        if (classPairsBuilder_ == null) {
          return classPairs_.size();
        } else {
          return classPairsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public proto.ClassSig.ClassRelationProto getClassPairs(int index) {
        if (classPairsBuilder_ == null) {
          return classPairs_.get(index);
        } else {
          return classPairsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public Builder setClassPairs(
          int index, proto.ClassSig.ClassRelationProto value) {
        if (classPairsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureClassPairsIsMutable();
          classPairs_.set(index, value);
          onChanged();
        } else {
          classPairsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public Builder setClassPairs(
          int index, proto.ClassSig.ClassRelationProto.Builder builderForValue) {
        if (classPairsBuilder_ == null) {
          ensureClassPairsIsMutable();
          classPairs_.set(index, builderForValue.build());
          onChanged();
        } else {
          classPairsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public Builder addClassPairs(proto.ClassSig.ClassRelationProto value) {
        if (classPairsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureClassPairsIsMutable();
          classPairs_.add(value);
          onChanged();
        } else {
          classPairsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public Builder addClassPairs(
          int index, proto.ClassSig.ClassRelationProto value) {
        if (classPairsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureClassPairsIsMutable();
          classPairs_.add(index, value);
          onChanged();
        } else {
          classPairsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public Builder addClassPairs(
          proto.ClassSig.ClassRelationProto.Builder builderForValue) {
        if (classPairsBuilder_ == null) {
          ensureClassPairsIsMutable();
          classPairs_.add(builderForValue.build());
          onChanged();
        } else {
          classPairsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public Builder addClassPairs(
          int index, proto.ClassSig.ClassRelationProto.Builder builderForValue) {
        if (classPairsBuilder_ == null) {
          ensureClassPairsIsMutable();
          classPairs_.add(index, builderForValue.build());
          onChanged();
        } else {
          classPairsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public Builder addAllClassPairs(
          java.lang.Iterable<? extends proto.ClassSig.ClassRelationProto> values) {
        if (classPairsBuilder_ == null) {
          ensureClassPairsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, classPairs_);
          onChanged();
        } else {
          classPairsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public Builder clearClassPairs() {
        if (classPairsBuilder_ == null) {
          classPairs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          classPairsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public Builder removeClassPairs(int index) {
        if (classPairsBuilder_ == null) {
          ensureClassPairsIsMutable();
          classPairs_.remove(index);
          onChanged();
        } else {
          classPairsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public proto.ClassSig.ClassRelationProto.Builder getClassPairsBuilder(
          int index) {
        return getClassPairsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public proto.ClassSig.ClassRelationProtoOrBuilder getClassPairsOrBuilder(
          int index) {
        if (classPairsBuilder_ == null) {
          return classPairs_.get(index);  } else {
          return classPairsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public java.util.List<? extends proto.ClassSig.ClassRelationProtoOrBuilder> 
           getClassPairsOrBuilderList() {
        if (classPairsBuilder_ != null) {
          return classPairsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(classPairs_);
        }
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public proto.ClassSig.ClassRelationProto.Builder addClassPairsBuilder() {
        return getClassPairsFieldBuilder().addBuilder(
            proto.ClassSig.ClassRelationProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public proto.ClassSig.ClassRelationProto.Builder addClassPairsBuilder(
          int index) {
        return getClassPairsFieldBuilder().addBuilder(
            index, proto.ClassSig.ClassRelationProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ClassRelationProto class_pairs = 7;</code>
       */
      public java.util.List<proto.ClassSig.ClassRelationProto.Builder> 
           getClassPairsBuilderList() {
        return getClassPairsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.ClassRelationProto, proto.ClassSig.ClassRelationProto.Builder, proto.ClassSig.ClassRelationProtoOrBuilder> 
          getClassPairsFieldBuilder() {
        if (classPairsBuilder_ == null) {
          classPairsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.ClassSig.ClassRelationProto, proto.ClassSig.ClassRelationProto.Builder, proto.ClassSig.ClassRelationProtoOrBuilder>(
                  classPairs_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          classPairs_ = null;
        }
        return classPairsBuilder_;
      }

      private java.util.List<proto.ClassSig.MethodRelationProto> methodPairs_ =
        java.util.Collections.emptyList();
      private void ensureMethodPairsIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          methodPairs_ = new java.util.ArrayList<proto.ClassSig.MethodRelationProto>(methodPairs_);
          bitField0_ |= 0x00000080;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.MethodRelationProto, proto.ClassSig.MethodRelationProto.Builder, proto.ClassSig.MethodRelationProtoOrBuilder> methodPairsBuilder_;

      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public java.util.List<proto.ClassSig.MethodRelationProto> getMethodPairsList() {
        if (methodPairsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(methodPairs_);
        } else {
          return methodPairsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public int getMethodPairsCount() {
        if (methodPairsBuilder_ == null) {
          return methodPairs_.size();
        } else {
          return methodPairsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public proto.ClassSig.MethodRelationProto getMethodPairs(int index) {
        if (methodPairsBuilder_ == null) {
          return methodPairs_.get(index);
        } else {
          return methodPairsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public Builder setMethodPairs(
          int index, proto.ClassSig.MethodRelationProto value) {
        if (methodPairsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodPairsIsMutable();
          methodPairs_.set(index, value);
          onChanged();
        } else {
          methodPairsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public Builder setMethodPairs(
          int index, proto.ClassSig.MethodRelationProto.Builder builderForValue) {
        if (methodPairsBuilder_ == null) {
          ensureMethodPairsIsMutable();
          methodPairs_.set(index, builderForValue.build());
          onChanged();
        } else {
          methodPairsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public Builder addMethodPairs(proto.ClassSig.MethodRelationProto value) {
        if (methodPairsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodPairsIsMutable();
          methodPairs_.add(value);
          onChanged();
        } else {
          methodPairsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public Builder addMethodPairs(
          int index, proto.ClassSig.MethodRelationProto value) {
        if (methodPairsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodPairsIsMutable();
          methodPairs_.add(index, value);
          onChanged();
        } else {
          methodPairsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public Builder addMethodPairs(
          proto.ClassSig.MethodRelationProto.Builder builderForValue) {
        if (methodPairsBuilder_ == null) {
          ensureMethodPairsIsMutable();
          methodPairs_.add(builderForValue.build());
          onChanged();
        } else {
          methodPairsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public Builder addMethodPairs(
          int index, proto.ClassSig.MethodRelationProto.Builder builderForValue) {
        if (methodPairsBuilder_ == null) {
          ensureMethodPairsIsMutable();
          methodPairs_.add(index, builderForValue.build());
          onChanged();
        } else {
          methodPairsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public Builder addAllMethodPairs(
          java.lang.Iterable<? extends proto.ClassSig.MethodRelationProto> values) {
        if (methodPairsBuilder_ == null) {
          ensureMethodPairsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, methodPairs_);
          onChanged();
        } else {
          methodPairsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public Builder clearMethodPairs() {
        if (methodPairsBuilder_ == null) {
          methodPairs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
          onChanged();
        } else {
          methodPairsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public Builder removeMethodPairs(int index) {
        if (methodPairsBuilder_ == null) {
          ensureMethodPairsIsMutable();
          methodPairs_.remove(index);
          onChanged();
        } else {
          methodPairsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public proto.ClassSig.MethodRelationProto.Builder getMethodPairsBuilder(
          int index) {
        return getMethodPairsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public proto.ClassSig.MethodRelationProtoOrBuilder getMethodPairsOrBuilder(
          int index) {
        if (methodPairsBuilder_ == null) {
          return methodPairs_.get(index);  } else {
          return methodPairsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public java.util.List<? extends proto.ClassSig.MethodRelationProtoOrBuilder> 
           getMethodPairsOrBuilderList() {
        if (methodPairsBuilder_ != null) {
          return methodPairsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(methodPairs_);
        }
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public proto.ClassSig.MethodRelationProto.Builder addMethodPairsBuilder() {
        return getMethodPairsFieldBuilder().addBuilder(
            proto.ClassSig.MethodRelationProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public proto.ClassSig.MethodRelationProto.Builder addMethodPairsBuilder(
          int index) {
        return getMethodPairsFieldBuilder().addBuilder(
            index, proto.ClassSig.MethodRelationProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.MethodRelationProto method_pairs = 8;</code>
       */
      public java.util.List<proto.ClassSig.MethodRelationProto.Builder> 
           getMethodPairsBuilderList() {
        return getMethodPairsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.MethodRelationProto, proto.ClassSig.MethodRelationProto.Builder, proto.ClassSig.MethodRelationProtoOrBuilder> 
          getMethodPairsFieldBuilder() {
        if (methodPairsBuilder_ == null) {
          methodPairsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.ClassSig.MethodRelationProto, proto.ClassSig.MethodRelationProto.Builder, proto.ClassSig.MethodRelationProtoOrBuilder>(
                  methodPairs_,
                  ((bitField0_ & 0x00000080) == 0x00000080),
                  getParentForChildren(),
                  isClean());
          methodPairs_ = null;
        }
        return methodPairsBuilder_;
      }

      private java.util.List<proto.ClassSig.ClassMethodRelationProto> classMethodPairs_ =
        java.util.Collections.emptyList();
      private void ensureClassMethodPairsIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          classMethodPairs_ = new java.util.ArrayList<proto.ClassSig.ClassMethodRelationProto>(classMethodPairs_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.ClassMethodRelationProto, proto.ClassSig.ClassMethodRelationProto.Builder, proto.ClassSig.ClassMethodRelationProtoOrBuilder> classMethodPairsBuilder_;

      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public java.util.List<proto.ClassSig.ClassMethodRelationProto> getClassMethodPairsList() {
        if (classMethodPairsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(classMethodPairs_);
        } else {
          return classMethodPairsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public int getClassMethodPairsCount() {
        if (classMethodPairsBuilder_ == null) {
          return classMethodPairs_.size();
        } else {
          return classMethodPairsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public proto.ClassSig.ClassMethodRelationProto getClassMethodPairs(int index) {
        if (classMethodPairsBuilder_ == null) {
          return classMethodPairs_.get(index);
        } else {
          return classMethodPairsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public Builder setClassMethodPairs(
          int index, proto.ClassSig.ClassMethodRelationProto value) {
        if (classMethodPairsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureClassMethodPairsIsMutable();
          classMethodPairs_.set(index, value);
          onChanged();
        } else {
          classMethodPairsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public Builder setClassMethodPairs(
          int index, proto.ClassSig.ClassMethodRelationProto.Builder builderForValue) {
        if (classMethodPairsBuilder_ == null) {
          ensureClassMethodPairsIsMutable();
          classMethodPairs_.set(index, builderForValue.build());
          onChanged();
        } else {
          classMethodPairsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public Builder addClassMethodPairs(proto.ClassSig.ClassMethodRelationProto value) {
        if (classMethodPairsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureClassMethodPairsIsMutable();
          classMethodPairs_.add(value);
          onChanged();
        } else {
          classMethodPairsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public Builder addClassMethodPairs(
          int index, proto.ClassSig.ClassMethodRelationProto value) {
        if (classMethodPairsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureClassMethodPairsIsMutable();
          classMethodPairs_.add(index, value);
          onChanged();
        } else {
          classMethodPairsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public Builder addClassMethodPairs(
          proto.ClassSig.ClassMethodRelationProto.Builder builderForValue) {
        if (classMethodPairsBuilder_ == null) {
          ensureClassMethodPairsIsMutable();
          classMethodPairs_.add(builderForValue.build());
          onChanged();
        } else {
          classMethodPairsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public Builder addClassMethodPairs(
          int index, proto.ClassSig.ClassMethodRelationProto.Builder builderForValue) {
        if (classMethodPairsBuilder_ == null) {
          ensureClassMethodPairsIsMutable();
          classMethodPairs_.add(index, builderForValue.build());
          onChanged();
        } else {
          classMethodPairsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public Builder addAllClassMethodPairs(
          java.lang.Iterable<? extends proto.ClassSig.ClassMethodRelationProto> values) {
        if (classMethodPairsBuilder_ == null) {
          ensureClassMethodPairsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, classMethodPairs_);
          onChanged();
        } else {
          classMethodPairsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public Builder clearClassMethodPairs() {
        if (classMethodPairsBuilder_ == null) {
          classMethodPairs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          classMethodPairsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public Builder removeClassMethodPairs(int index) {
        if (classMethodPairsBuilder_ == null) {
          ensureClassMethodPairsIsMutable();
          classMethodPairs_.remove(index);
          onChanged();
        } else {
          classMethodPairsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public proto.ClassSig.ClassMethodRelationProto.Builder getClassMethodPairsBuilder(
          int index) {
        return getClassMethodPairsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public proto.ClassSig.ClassMethodRelationProtoOrBuilder getClassMethodPairsOrBuilder(
          int index) {
        if (classMethodPairsBuilder_ == null) {
          return classMethodPairs_.get(index);  } else {
          return classMethodPairsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public java.util.List<? extends proto.ClassSig.ClassMethodRelationProtoOrBuilder> 
           getClassMethodPairsOrBuilderList() {
        if (classMethodPairsBuilder_ != null) {
          return classMethodPairsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(classMethodPairs_);
        }
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public proto.ClassSig.ClassMethodRelationProto.Builder addClassMethodPairsBuilder() {
        return getClassMethodPairsFieldBuilder().addBuilder(
            proto.ClassSig.ClassMethodRelationProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public proto.ClassSig.ClassMethodRelationProto.Builder addClassMethodPairsBuilder(
          int index) {
        return getClassMethodPairsFieldBuilder().addBuilder(
            index, proto.ClassSig.ClassMethodRelationProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ClassMethodRelationProto class_method_pairs = 9;</code>
       */
      public java.util.List<proto.ClassSig.ClassMethodRelationProto.Builder> 
           getClassMethodPairsBuilderList() {
        return getClassMethodPairsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.ClassMethodRelationProto, proto.ClassSig.ClassMethodRelationProto.Builder, proto.ClassSig.ClassMethodRelationProtoOrBuilder> 
          getClassMethodPairsFieldBuilder() {
        if (classMethodPairsBuilder_ == null) {
          classMethodPairsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.ClassSig.ClassMethodRelationProto, proto.ClassSig.ClassMethodRelationProto.Builder, proto.ClassSig.ClassMethodRelationProtoOrBuilder>(
                  classMethodPairs_,
                  ((bitField0_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          classMethodPairs_ = null;
        }
        return classMethodPairsBuilder_;
      }

      private java.util.List<proto.ClassSig.MethodClassRelationProto> methodClassPairs_ =
        java.util.Collections.emptyList();
      private void ensureMethodClassPairsIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          methodClassPairs_ = new java.util.ArrayList<proto.ClassSig.MethodClassRelationProto>(methodClassPairs_);
          bitField0_ |= 0x00000200;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.MethodClassRelationProto, proto.ClassSig.MethodClassRelationProto.Builder, proto.ClassSig.MethodClassRelationProtoOrBuilder> methodClassPairsBuilder_;

      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public java.util.List<proto.ClassSig.MethodClassRelationProto> getMethodClassPairsList() {
        if (methodClassPairsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(methodClassPairs_);
        } else {
          return methodClassPairsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public int getMethodClassPairsCount() {
        if (methodClassPairsBuilder_ == null) {
          return methodClassPairs_.size();
        } else {
          return methodClassPairsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public proto.ClassSig.MethodClassRelationProto getMethodClassPairs(int index) {
        if (methodClassPairsBuilder_ == null) {
          return methodClassPairs_.get(index);
        } else {
          return methodClassPairsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public Builder setMethodClassPairs(
          int index, proto.ClassSig.MethodClassRelationProto value) {
        if (methodClassPairsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodClassPairsIsMutable();
          methodClassPairs_.set(index, value);
          onChanged();
        } else {
          methodClassPairsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public Builder setMethodClassPairs(
          int index, proto.ClassSig.MethodClassRelationProto.Builder builderForValue) {
        if (methodClassPairsBuilder_ == null) {
          ensureMethodClassPairsIsMutable();
          methodClassPairs_.set(index, builderForValue.build());
          onChanged();
        } else {
          methodClassPairsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public Builder addMethodClassPairs(proto.ClassSig.MethodClassRelationProto value) {
        if (methodClassPairsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodClassPairsIsMutable();
          methodClassPairs_.add(value);
          onChanged();
        } else {
          methodClassPairsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public Builder addMethodClassPairs(
          int index, proto.ClassSig.MethodClassRelationProto value) {
        if (methodClassPairsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodClassPairsIsMutable();
          methodClassPairs_.add(index, value);
          onChanged();
        } else {
          methodClassPairsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public Builder addMethodClassPairs(
          proto.ClassSig.MethodClassRelationProto.Builder builderForValue) {
        if (methodClassPairsBuilder_ == null) {
          ensureMethodClassPairsIsMutable();
          methodClassPairs_.add(builderForValue.build());
          onChanged();
        } else {
          methodClassPairsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public Builder addMethodClassPairs(
          int index, proto.ClassSig.MethodClassRelationProto.Builder builderForValue) {
        if (methodClassPairsBuilder_ == null) {
          ensureMethodClassPairsIsMutable();
          methodClassPairs_.add(index, builderForValue.build());
          onChanged();
        } else {
          methodClassPairsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public Builder addAllMethodClassPairs(
          java.lang.Iterable<? extends proto.ClassSig.MethodClassRelationProto> values) {
        if (methodClassPairsBuilder_ == null) {
          ensureMethodClassPairsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, methodClassPairs_);
          onChanged();
        } else {
          methodClassPairsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public Builder clearMethodClassPairs() {
        if (methodClassPairsBuilder_ == null) {
          methodClassPairs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          methodClassPairsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public Builder removeMethodClassPairs(int index) {
        if (methodClassPairsBuilder_ == null) {
          ensureMethodClassPairsIsMutable();
          methodClassPairs_.remove(index);
          onChanged();
        } else {
          methodClassPairsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public proto.ClassSig.MethodClassRelationProto.Builder getMethodClassPairsBuilder(
          int index) {
        return getMethodClassPairsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public proto.ClassSig.MethodClassRelationProtoOrBuilder getMethodClassPairsOrBuilder(
          int index) {
        if (methodClassPairsBuilder_ == null) {
          return methodClassPairs_.get(index);  } else {
          return methodClassPairsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public java.util.List<? extends proto.ClassSig.MethodClassRelationProtoOrBuilder> 
           getMethodClassPairsOrBuilderList() {
        if (methodClassPairsBuilder_ != null) {
          return methodClassPairsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(methodClassPairs_);
        }
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public proto.ClassSig.MethodClassRelationProto.Builder addMethodClassPairsBuilder() {
        return getMethodClassPairsFieldBuilder().addBuilder(
            proto.ClassSig.MethodClassRelationProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public proto.ClassSig.MethodClassRelationProto.Builder addMethodClassPairsBuilder(
          int index) {
        return getMethodClassPairsFieldBuilder().addBuilder(
            index, proto.ClassSig.MethodClassRelationProto.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.MethodClassRelationProto method_class_pairs = 10;</code>
       */
      public java.util.List<proto.ClassSig.MethodClassRelationProto.Builder> 
           getMethodClassPairsBuilderList() {
        return getMethodClassPairsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.MethodClassRelationProto, proto.ClassSig.MethodClassRelationProto.Builder, proto.ClassSig.MethodClassRelationProtoOrBuilder> 
          getMethodClassPairsFieldBuilder() {
        if (methodClassPairsBuilder_ == null) {
          methodClassPairsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.ClassSig.MethodClassRelationProto, proto.ClassSig.MethodClassRelationProto.Builder, proto.ClassSig.MethodClassRelationProtoOrBuilder>(
                  methodClassPairs_,
                  ((bitField0_ & 0x00000200) == 0x00000200),
                  getParentForChildren(),
                  isClean());
          methodClassPairs_ = null;
        }
        return methodClassPairsBuilder_;
      }

      private long timestamp_ ;
      /**
       * <code>uint64 timestamp = 11;</code>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>uint64 timestamp = 11;</code>
       */
      public Builder setTimestamp(long value) {
        
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 timestamp = 11;</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.PkgClassMethodResult)
    }

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

    public static proto.ClassSig.PkgClassMethodResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.ClassSig.PkgClassMethodResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

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

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private PkgClassMethodResults(
        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.ClassSig.PkgClassMethodResult>();
                mutable_bitField0_ |= 0x00000001;
              }
              pkgs_.add(
                  input.readMessage(proto.ClassSig.PkgClassMethodResult.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.ClassSig.internal_static_proto_PkgClassMethodResults_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.ClassSig.internal_static_proto_PkgClassMethodResults_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.ClassSig.PkgClassMethodResults.class, proto.ClassSig.PkgClassMethodResults.Builder.class);
    }

    private int bitField0_;
    public static final int PKGS_FIELD_NUMBER = 1;
    private java.util.List<proto.ClassSig.PkgClassMethodResult> pkgs_;
    /**
     * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
     */
    public java.util.List<proto.ClassSig.PkgClassMethodResult> getPkgsList() {
      return pkgs_;
    }
    /**
     * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
     */
    public java.util.List<? extends proto.ClassSig.PkgClassMethodResultOrBuilder> 
        getPkgsOrBuilderList() {
      return pkgs_;
    }
    /**
     * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
     */
    public int getPkgsCount() {
      return pkgs_.size();
    }
    /**
     * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
     */
    public proto.ClassSig.PkgClassMethodResult getPkgs(int index) {
      return pkgs_.get(index);
    }
    /**
     * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
     */
    public proto.ClassSig.PkgClassMethodResultOrBuilder 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.ClassSig.PkgClassMethodResults)) {
        return super.equals(obj);
      }
      proto.ClassSig.PkgClassMethodResults other = (proto.ClassSig.PkgClassMethodResults) 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.ClassSig.PkgClassMethodResults parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.PkgClassMethodResults parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.PkgClassMethodResults parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.PkgClassMethodResults parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.PkgClassMethodResults parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.ClassSig.PkgClassMethodResults parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.ClassSig.PkgClassMethodResults parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.PkgClassMethodResults 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.ClassSig.PkgClassMethodResults parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.ClassSig.PkgClassMethodResults 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.ClassSig.PkgClassMethodResults parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.ClassSig.PkgClassMethodResults 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.ClassSig.PkgClassMethodResults 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.PkgClassMethodResults}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.PkgClassMethodResults)
        proto.ClassSig.PkgClassMethodResultsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.ClassSig.internal_static_proto_PkgClassMethodResults_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.ClassSig.internal_static_proto_PkgClassMethodResults_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.ClassSig.PkgClassMethodResults.class, proto.ClassSig.PkgClassMethodResults.Builder.class);
      }

      // Construct using proto.ClassSig.PkgClassMethodResults.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.ClassSig.internal_static_proto_PkgClassMethodResults_descriptor;
      }

      @java.lang.Override
      public proto.ClassSig.PkgClassMethodResults getDefaultInstanceForType() {
        return proto.ClassSig.PkgClassMethodResults.getDefaultInstance();
      }

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

      @java.lang.Override
      public proto.ClassSig.PkgClassMethodResults buildPartial() {
        proto.ClassSig.PkgClassMethodResults result = new proto.ClassSig.PkgClassMethodResults(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.ClassSig.PkgClassMethodResults) {
          return mergeFrom((proto.ClassSig.PkgClassMethodResults)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.ClassSig.PkgClassMethodResults other) {
        if (other == proto.ClassSig.PkgClassMethodResults.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.ClassSig.PkgClassMethodResults parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.ClassSig.PkgClassMethodResults) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

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

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.PkgClassMethodResult, proto.ClassSig.PkgClassMethodResult.Builder, proto.ClassSig.PkgClassMethodResultOrBuilder> pkgsBuilder_;

      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public java.util.List<proto.ClassSig.PkgClassMethodResult> getPkgsList() {
        if (pkgsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(pkgs_);
        } else {
          return pkgsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public int getPkgsCount() {
        if (pkgsBuilder_ == null) {
          return pkgs_.size();
        } else {
          return pkgsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public proto.ClassSig.PkgClassMethodResult getPkgs(int index) {
        if (pkgsBuilder_ == null) {
          return pkgs_.get(index);
        } else {
          return pkgsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public Builder setPkgs(
          int index, proto.ClassSig.PkgClassMethodResult 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.PkgClassMethodResult pkgs = 1;</code>
       */
      public Builder setPkgs(
          int index, proto.ClassSig.PkgClassMethodResult.Builder builderForValue) {
        if (pkgsBuilder_ == null) {
          ensurePkgsIsMutable();
          pkgs_.set(index, builderForValue.build());
          onChanged();
        } else {
          pkgsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public Builder addPkgs(proto.ClassSig.PkgClassMethodResult value) {
        if (pkgsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePkgsIsMutable();
          pkgs_.add(value);
          onChanged();
        } else {
          pkgsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public Builder addPkgs(
          int index, proto.ClassSig.PkgClassMethodResult 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.PkgClassMethodResult pkgs = 1;</code>
       */
      public Builder addPkgs(
          proto.ClassSig.PkgClassMethodResult.Builder builderForValue) {
        if (pkgsBuilder_ == null) {
          ensurePkgsIsMutable();
          pkgs_.add(builderForValue.build());
          onChanged();
        } else {
          pkgsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public Builder addPkgs(
          int index, proto.ClassSig.PkgClassMethodResult.Builder builderForValue) {
        if (pkgsBuilder_ == null) {
          ensurePkgsIsMutable();
          pkgs_.add(index, builderForValue.build());
          onChanged();
        } else {
          pkgsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public Builder addAllPkgs(
          java.lang.Iterable<? extends proto.ClassSig.PkgClassMethodResult> values) {
        if (pkgsBuilder_ == null) {
          ensurePkgsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, pkgs_);
          onChanged();
        } else {
          pkgsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult 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.PkgClassMethodResult 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.PkgClassMethodResult pkgs = 1;</code>
       */
      public proto.ClassSig.PkgClassMethodResult.Builder getPkgsBuilder(
          int index) {
        return getPkgsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public proto.ClassSig.PkgClassMethodResultOrBuilder getPkgsOrBuilder(
          int index) {
        if (pkgsBuilder_ == null) {
          return pkgs_.get(index);  } else {
          return pkgsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public java.util.List<? extends proto.ClassSig.PkgClassMethodResultOrBuilder> 
           getPkgsOrBuilderList() {
        if (pkgsBuilder_ != null) {
          return pkgsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(pkgs_);
        }
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public proto.ClassSig.PkgClassMethodResult.Builder addPkgsBuilder() {
        return getPkgsFieldBuilder().addBuilder(
            proto.ClassSig.PkgClassMethodResult.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public proto.ClassSig.PkgClassMethodResult.Builder addPkgsBuilder(
          int index) {
        return getPkgsFieldBuilder().addBuilder(
            index, proto.ClassSig.PkgClassMethodResult.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.PkgClassMethodResult pkgs = 1;</code>
       */
      public java.util.List<proto.ClassSig.PkgClassMethodResult.Builder> 
           getPkgsBuilderList() {
        return getPkgsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.ClassSig.PkgClassMethodResult, proto.ClassSig.PkgClassMethodResult.Builder, proto.ClassSig.PkgClassMethodResultOrBuilder> 
          getPkgsFieldBuilder() {
        if (pkgsBuilder_ == null) {
          pkgsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.ClassSig.PkgClassMethodResult, proto.ClassSig.PkgClassMethodResult.Builder, proto.ClassSig.PkgClassMethodResultOrBuilder>(
                  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.PkgClassMethodResults)
    }

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

    public static proto.ClassSig.PkgClassMethodResults getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.ClassSig.PkgClassMethodResults getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_Centroid_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_Centroid_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_BasicBlockProto_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_BasicBlockProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_MethodAttributeProto_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_MethodAttributeProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ClassAttributeProto_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ClassAttributeProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ClassRelationProto_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ClassRelationProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ClassRelationProto_RelationCounter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ClassRelationProto_RelationCounter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_MethodRelationProto_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_MethodRelationProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ClassMethodRelationProto_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ClassMethodRelationProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_MethodClassRelationProto_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_MethodClassRelationProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_PkgClassMethodResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_PkgClassMethodResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_PkgClassMethodResults_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_PkgClassMethodResults_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\017class_sig.proto\022\005proto\032\tast.proto\"6\n\010C" +
      "entroid\022\t\n\001x\030\001 \001(\001\022\t\n\001y\030\002 \001(\001\022\t\n\001z\030\003 \001(\001" +
      "\022\t\n\001w\030\004 \001(\005\"\254\002\n\017BasicBlockProto\022\027\n\017seque" +
      "nce_number\030\001 \001(\005\022\021\n\tin_degree\030\002 \001(\005\022\022\n\no" +
      "ut_degree\030\003 \001(\005\022\037\n\027in_degree_unexception" +
      "al\030\004 \001(\005\022 \n\030out_degree_unexceptional\030\005 \001" +
      "(\005\022\022\n\nloop_depth\030\006 \001(\005\022\022\n\nstmt_count\030\007 \001" +
      "(\005\022!\n\031invoked_method_signatures\030\010 \003(\t\022\024\n" +
      "\014predecessors\030\t \003(\005\022\022\n\nsuccessors\030\n \003(\005\022" +
      "!\n\031dominator_sequence_number\030\013 \001(\005\"\255\003\n\024M" +
      "ethodAttributeProto\022\022\n\nclass_name\030\001 \001(\t\022" +
      "\023\n\013method_name\030\002 \001(\t\022\030\n\020method_signature" +
      "\030\003 \001(\t\022\033\n\023method_subsignature\030\004 \001(\t\022\026\n\016p" +
      "aramter_types\030\005 \003(\t\022\023\n\013return_type\030\006 \001(\t" +
      "\022\023\n\013local_types\030\007 \003(\t\022\030\n\020string_constant" +
      "s\030\010 \003(\t\022!\n\031invoked_method_signatures\030\t \003" +
      "(\t\022\025\n\rresource_refs\030\n \003(\t\022\022\n\nstatements\030" +
      "\013 \003(\t\022\021\n\tmodifiers\030\014 \001(\t\022!\n\010centroid\030\r \001" +
      "(\0132\017.proto.Centroid\022-\n\024centroid_with_inv" +
      "oke\030\016 \001(\0132\017.proto.Centroid\022&\n\006blocks\030\017 \003" +
      "(\0132\026.proto.BasicBlockProto\"\305\002\n\023ClassAttr" +
      "ibuteProto\022\022\n\nclass_name\030\001 \001(\t\022\030\n\020super_" +
      "class_name\030\002 \001(\t\022\035\n\025interface_class_name" +
      "s\030\003 \003(\t\022\024\n\014package_name\030\004 \001(\t\022\026\n\016is_entr" +
      "y_point\030\005 \001(\010\022\034\n\024static_field_strings\030\006 " +
      "\003(\t\022\036\n\026instance_field_strings\030\007 \003(\t\022\032\n\022p" +
      "ermission_strings\030\010 \003(\t\022,\n\007methods\030\t \003(\013" +
      "2\033.proto.MethodAttributeProto\022\030\n\020outer_c" +
      "lass_name\030\n \001(\t\022\021\n\tmodifiers\030\013 \001(\t\"\306\006\n\022C" +
      "lassRelationProto\022\022\n\nclassname1\030\001 \001(\t\022\022\n" +
      "\nclassname2\030\002 \001(\t\022D\n\021relation_counters\030\003" +
      " \003(\0132).proto.ClassRelationProto.Relation" +
      "Counter\022\'\n\037classname2_is_application_cla" +
      "ss\030\004 \001(\010\022\036\n\026classname2_permissions\030\005 \003(\t" +
      "\032h\n\017RelationCounter\022=\n\rrelation_type\030\001 \001" +
      "(\0162&.proto.ClassRelationProto.RelationTy" +
      "pe\022\026\n\016relation_count\030\002 \001(\005\"\216\004\n\014RelationT" +
      "ype\022\017\n\013INHERITANCE\020\000\022\026\n\022STATIC_ARRAY_FIE" +
      "LD\020\001\022\021\n\rSTATIC__FIELD\020\002\022\030\n\024INSTANCE_ARRA" +
      "Y_FIELD\020\003\022\022\n\016INSTANCE_FIELD\020\004\022\033\n\027METHOD_" +
      "ARRAY_PARAMERTER\020\005\022\024\n\020METHOD_PARAMETER\020\006" +
      "\022\027\n\023METHOD_ARRAY_RETURN\020\007\022\021\n\rMETHOD_RETU" +
      "RN\020\010\022\026\n\022METHOD_ARRAY_LOCAL\020\t\022\020\n\014METHOD_L" +
      "OCAL\020\n\022\022\n\016STMT_ARRAY_REF\020\013\022\033\n\027STMT_INSTA" +
      "NCE_FIELD_REF\020\014\022\031\n\025STMT_STATIC_FIELD_REF" +
      "\020\r\022\022\n\016STMT_LOCAL_REF\020\016\022\r\n\tCAST_EXPR\020\017\022\024\n" +
      "\020INSTANCE_OF_EXPR\020\020\022\014\n\010NEW_EXPR\020\021\022\022\n\016NEW" +
      "_ARRAY_EXPR\020\022\022\030\n\024NEW_MULTI_ARRAY_EXPR\020\023\022" +
      "\017\n\013INVOKE_EXPR\020\024\022\007\n\003ICC\020\025\022\010\n\004IMPL\020\026\022\017\n\013O" +
      "UTER_CLASS\020\027\022\025\n\021ClassRelationNone\020\030\"?\n\023M" +
      "ethodRelationProto\022\023\n\013methodname1\030\001 \001(\t\022" +
      "\023\n\013methodname2\030\002 \001(\t\"C\n\030ClassMethodRelat" +
      "ionProto\022\022\n\nclassname1\030\001 \001(\t\022\023\n\013methodna" +
      "me2\030\002 \001(\t\"C\n\030MethodClassRelationProto\022\023\n" +
      "\013methodname1\030\001 \001(\t\022\022\n\nclassname2\030\002 \001(\t\"\276" +
      "\003\n\024PkgClassMethodResult\022\020\n\010pkg_name\030\001 \001(" +
      "\t\022\023\n\013pkg_version\030\002 \001(\t\022!\n\010language\030\003 \001(\016" +
      "2\017.proto.Language\022\022\n\ninput_path\030\004 \001(\t\022+\n" +
      "\007classes\030\005 \003(\0132\032.proto.ClassAttributePro" +
      "to\022,\n\007methods\030\006 \003(\0132\033.proto.MethodAttrib" +
      "uteProto\022.\n\013class_pairs\030\007 \003(\0132\031.proto.Cl" +
      "assRelationProto\0220\n\014method_pairs\030\010 \003(\0132\032" +
      ".proto.MethodRelationProto\022;\n\022class_meth" +
      "od_pairs\030\t \003(\0132\037.proto.ClassMethodRelati" +
      "onProto\022;\n\022method_class_pairs\030\n \003(\0132\037.pr" +
      "oto.MethodClassRelationProto\022\021\n\ttimestam" +
      "p\030\013 \001(\004\"U\n\025PkgClassMethodResults\022)\n\004pkgs" +
      "\030\001 \003(\0132\033.proto.PkgClassMethodResult\022\021\n\tt" +
      "imestamp\030\002 \001(\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[] {
          proto.Ast.getDescriptor(),
        }, assigner);
    internal_static_proto_Centroid_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_proto_Centroid_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_Centroid_descriptor,
        new java.lang.String[] { "X", "Y", "Z", "W", });
    internal_static_proto_BasicBlockProto_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_proto_BasicBlockProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_BasicBlockProto_descriptor,
        new java.lang.String[] { "SequenceNumber", "InDegree", "OutDegree", "InDegreeUnexceptional", "OutDegreeUnexceptional", "LoopDepth", "StmtCount", "InvokedMethodSignatures", "Predecessors", "Successors", "DominatorSequenceNumber", });
    internal_static_proto_MethodAttributeProto_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_proto_MethodAttributeProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_MethodAttributeProto_descriptor,
        new java.lang.String[] { "ClassName", "MethodName", "MethodSignature", "MethodSubsignature", "ParamterTypes", "ReturnType", "LocalTypes", "StringConstants", "InvokedMethodSignatures", "ResourceRefs", "Statements", "Modifiers", "Centroid", "CentroidWithInvoke", "Blocks", });
    internal_static_proto_ClassAttributeProto_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_proto_ClassAttributeProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ClassAttributeProto_descriptor,
        new java.lang.String[] { "ClassName", "SuperClassName", "InterfaceClassNames", "PackageName", "IsEntryPoint", "StaticFieldStrings", "InstanceFieldStrings", "PermissionStrings", "Methods", "OuterClassName", "Modifiers", });
    internal_static_proto_ClassRelationProto_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_proto_ClassRelationProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ClassRelationProto_descriptor,
        new java.lang.String[] { "Classname1", "Classname2", "RelationCounters", "Classname2IsApplicationClass", "Classname2Permissions", });
    internal_static_proto_ClassRelationProto_RelationCounter_descriptor =
      internal_static_proto_ClassRelationProto_descriptor.getNestedTypes().get(0);
    internal_static_proto_ClassRelationProto_RelationCounter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ClassRelationProto_RelationCounter_descriptor,
        new java.lang.String[] { "RelationType", "RelationCount", });
    internal_static_proto_MethodRelationProto_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_proto_MethodRelationProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_MethodRelationProto_descriptor,
        new java.lang.String[] { "Methodname1", "Methodname2", });
    internal_static_proto_ClassMethodRelationProto_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_proto_ClassMethodRelationProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ClassMethodRelationProto_descriptor,
        new java.lang.String[] { "Classname1", "Methodname2", });
    internal_static_proto_MethodClassRelationProto_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_proto_MethodClassRelationProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_MethodClassRelationProto_descriptor,
        new java.lang.String[] { "Methodname1", "Classname2", });
    internal_static_proto_PkgClassMethodResult_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_proto_PkgClassMethodResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_PkgClassMethodResult_descriptor,
        new java.lang.String[] { "PkgName", "PkgVersion", "Language", "InputPath", "Classes", "Methods", "ClassPairs", "MethodPairs", "ClassMethodPairs", "MethodClassPairs", "Timestamp", });
    internal_static_proto_PkgClassMethodResults_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_proto_PkgClassMethodResults_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_PkgClassMethodResults_descriptor,
        new java.lang.String[] { "Pkgs", "Timestamp", });
    proto.Ast.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
