code: private static int scanTypeBoundSignature(String string, int start) {
  		// need a minimum 1 char for wildcard
  		if (start >= string.length()) {
  			throw new IllegalArgumentException();
  		}
  		char c = string.charAt(start);
  		switch (c) {
  			case C_STAR :
  				return start;
  			case C_SUPER :
  			case C_EXTENDS :
  				// need a minimum 3 chars "+[I"
  				if (start >= string.length() - 2) {
  					throw new IllegalArgumentException();
  				}
  				break;
  			default :
  				// must start in "+/-"
  					throw new IllegalArgumentException();
  	
  		}
  		c = string.charAt(++start);
  		switch (c) {
  			case C_CAPTURE :
  				return scanCaptureTypeSignature(string, start);
  			case C_SUPER :
  			case C_EXTENDS :
  				return scanTypeBoundSignature(string, start);
  			case C_RESOLVED :
  			case C_UNRESOLVED :
  				return scanClassTypeSignature(string, start);
  			case C_TYPE_VARIABLE :
  				return scanTypeVariableSignature(string, start);
  			case C_ARRAY :
  				return scanArrayTypeSignature(string, start);
  			case C_STAR:
  				return start;
  			default:
  				throw new IllegalArgumentException();
  		}
  	}
docs: Scans the given string for a type bound signature starting at the given
  index and returns the index of the last character.
  <pre>
  TypeBoundSignature:
  <b>[-+]</b> TypeSignature <b>;</b>
  <b>*</b></b>
  </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 variable signature