/**
  * Checks that the given string is a valid unqualified name.
  *
  * @param version the class version.
  * @param name the string to be checked.
  * @param msg a message to be used in case of error.
  */
 static void checkUnqualifiedName(int version, final String name, final String msg) {
   if ((version & 0xFFFF) < Opcodes.V1_5) {
     checkIdentifier(name, msg);
   } else {
     for (int i = 0; i < name.length(); ++i) {
       if (".;[/".indexOf(name.charAt(i)) != -1) {
         throw new IllegalArgumentException(
             "Invalid " + msg + " (must be a valid unqualified name): " + name);
       }
     }
   }
 }
 /**
  * Checks that the given substring is a valid internal class name.
  *
  * @param name the string to be checked.
  * @param start index of the first character of the identifier (inclusive).
  * @param end index of the last character of the identifier (exclusive). -1 is equivalent to
  *     <tt>name.length()</tt> if name is not <tt>null</tt>.
  * @param msg a message to be used in case of error.
  */
 static void checkInternalName(
     final String name, final int start, final int end, final String msg) {
   int max = end == -1 ? name.length() : end;
   try {
     int begin = start;
     int slash;
     do {
       slash = name.indexOf('/', begin + 1);
       if (slash == -1 || slash > max) {
         slash = max;
       }
       checkIdentifier(name, begin, slash, null);
       begin = slash + 1;
     } while (slash != max);
   } catch (IllegalArgumentException unused) {
     throw new IllegalArgumentException(
         "Invalid " + msg + " (must be a fully qualified class name in internal form): " + name);
   }
 }
 /**
  * Checks that the given string is a valid Java identifier.
  *
  * @param name the string to be checked.
  * @param msg a message to be used in case of error.
  */
 static void checkIdentifier(final String name, final String msg) {
   checkIdentifier(name, 0, -1, msg);
 }