Map methodTypeDecls= new HashMap();
	public static char[] unboundedSignature(char[] signature) {		if (signature == null || signature.length < 2)			return signature;				// XXX the signatures from CompletionRequestor contain a superfluous '+'		// before type parameters to parameter types		StringBuffer sig= new StringBuffer();		sig.append(signature);		do {			int pos= sig.indexOf("++"); //$NON-NLS-1$			if (pos == -1)				pos= sig.indexOf("+*"); //$NON-NLS-1$			if (pos == -1)				pos= sig.indexOf("+-"); //$NON-NLS-1$			if (pos == -1)				break;			sig.deleteCharAt(pos);		} while (true);		signature= sig.toString().toCharArray();				int pos= 0;		// skip type declaration		if (signature[pos] == Signature.C_GENERIC_START) {			int colonPos;			do {				colonPos= CharOperation.indexOf(Signature.C_COLON, signature, pos + 1);				if (colonPos == -1)					break;				pos= Util.scanTypeArgumentSignature(signature, colonPos + 1);			} while (true);			pos++;			if (signature[pos] != Signature.C_GENERIC_END)				throw new IllegalArgumentException(String.valueOf(signature));			pos++;		}				if (signature[pos] != Signature.C_PARAM_START)			throw new IllegalArgumentException(String.valueOf(signature));		pos++;				StringBuffer res= new StringBuffer("("); //$NON-NLS-1$		boolean isReturnType= false;		while (pos < signature.length) {			char ch= signature[pos];			switch (ch) {				case Signature.C_STAR:					pos++;					if (isReturnType)						res.append(OBJECT_SIGNATURE); // return type is at least Object					else						res.append(NULL_TYPE_SIGNATURE); // no lower bound! return void type for now //$NON-NLS-1$					break;				case Signature.C_SUPER:					int end= Util.scanTypeSignature(signature, pos + 1);					if (isReturnType)						res.append(OBJECT_SIGNATURE); // return type is at least Object					else						res.append(signature, pos + 1, end - pos);					pos= end + 1;					break;				case Signature.C_EXTENDS:					end= Util.scanTypeSignature(signature, pos + 1);					if (isReturnType)						res.append(signature, pos + 1, end - pos);					else						res.append(NULL_TYPE_SIGNATURE);					pos= end + 1;					break;				case Signature.C_PARAM_END:					pos++;					res.append(Signature.C_PARAM_END);					isReturnType= true;					break;				default:					end= Util.scanTypeSignature(signature, pos);					res.append(signature, pos, end - pos + 1);					pos= end + 1;					break;			}		}				return res.toString().toCharArray();	}