code: static int scanTypeSignature(String string, int start) {
  		// need a minimum 1 char
  		if (start >= string.length()) {
  			throw new IllegalArgumentException();
  		}
  		char c = string.charAt(start);
  		switch (c) {
  			case C_ARRAY :
  				return scanArrayTypeSignature(string, start);
  			case C_RESOLVED :
  			case C_UNRESOLVED :
  				return scanClassTypeSignature(string, start);
  			case C_TYPE_VARIABLE :
  				return scanTypeVariableSignature(string, start);
  			case C_BOOLEAN :
  			case C_BYTE :
  			case C_CHAR :
  			case C_DOUBLE :
  			case C_FLOAT :
  			case C_INT :
  			case C_LONG :
  			case C_SHORT :
  			case C_VOID :
  				return scanBaseTypeSignature(string, start);
  			case C_CAPTURE :
  				return scanCaptureTypeSignature(string, start);
  			case C_EXTENDS:
  			case C_SUPER:
  			case C_STAR:
  				return scanTypeBoundSignature(string, start);
  			default :
  				throw new IllegalArgumentException();
  		}
  	}
docs: Scans the given string for a type signature starting at the given index
  and returns the index of the last character.
  <pre>
  TypeSignature:
  |  BaseTypeSignature
  |  ArrayTypeSignature
  |  ClassTypeSignature
  |  TypeVariableSignature
  </pre>
  
  @param string the signature string
  @param start the 0-based character index of the first character
  @return the 0-based character index of the last character
  @exception IllegalArgumentException if this is not a type signature