public static Annotation makeSignature(CstString signature) {
    Annotation result = new Annotation(SIGNATURE_TYPE, SYSTEM);

    /*
     * Split the string into pieces that are likely to be common
     * across many signatures and the rest of the file.
     */

    String raw = signature.getString();
    int rawLength = raw.length();
    ArrayList<String> pieces = new ArrayList<String>(20);

    for (int at = 0; at < rawLength; /*at*/ ) {
      char c = raw.charAt(at);
      int endAt = at + 1;
      if (c == 'L') {
        // Scan to ';' or '<'. Consume ';' but not '<'.
        while (endAt < rawLength) {
          c = raw.charAt(endAt);
          if (c == ';') {
            endAt++;
            break;
          } else if (c == '<') {
            break;
          }
          endAt++;
        }
      } else {
        // Scan to 'L' without consuming it.
        while (endAt < rawLength) {
          c = raw.charAt(endAt);
          if (c == 'L') {
            break;
          }
          endAt++;
        }
      }

      pieces.add(raw.substring(at, endAt));
      at = endAt;
    }

    int size = pieces.size();
    CstArray.List list = new CstArray.List(size);

    for (int i = 0; i < size; i++) {
      list.set(i, new CstString(pieces.get(i)));
    }

    list.setImmutable();

    result.put(new NameValuePair(VALUE_STRING, new CstArray(list)));
    result.setImmutable();
    return result;
  }
Constructs a standard {@code Signature} annotation.

@param signature {@code non-null;} the signature string
@return {@code non-null;} the annotation
android/android_framework/dex-maker/src/main/java/com/android/dx/dex/file/AnnotationUtils.java