public static char[] getLowerBound(char[] signature) { if (signature.length < 1) return signature;  if (signature[0] == Signature.C_STAR) return NULL_TYPE_SIGNATURE_ARRAY;  int superIndex= indexOf(signature, Signature.C_EXTENDS); if (superIndex == 0) return NULL_TYPE_SIGNATURE_ARRAY;  if (superIndex != -1) { char afterSuper= signature[superIndex + 1]; if (afterSuper == Signature.C_STAR || afterSuper == Signature.C_EXTENDS)  return NULL_TYPE_SIGNATURE_ARRAY; }  char[][] typeArguments= Signature.getTypeArguments(signature); for (int i= 0; i < typeArguments.length; i++) if (Arrays.equals(typeArguments[i], NULL_TYPE_SIGNATURE_ARRAY)) return NULL_TYPE_SIGNATURE_ARRAY;  if (signature[0] == Signature.C_SUPER) { char[] type= new char[signature.length - 1]; System.arraycopy(signature, 1, type, 0, signature.length - 1); return type; }  return signature;
public static String getLowerBound(String signature) { return String.valueOf(getLowerBound(signature.toCharArray()));
	public static char[] getLowerBound(char[] signature) {		if (signature.length < 1)			return signature;				if (signature[0] == Signature.C_STAR)			return NULL_TYPE_SIGNATURE_ARRAY;				int superIndex= indexOf(signature, Signature.C_EXTENDS);		if (superIndex == 0)			return NULL_TYPE_SIGNATURE_ARRAY;				if (superIndex != -1) {			char afterSuper= signature[superIndex + 1];			if (afterSuper == Signature.C_STAR || afterSuper == Signature.C_EXTENDS)				// impossible captured type				return NULL_TYPE_SIGNATURE_ARRAY;		}				char[][] typeArguments= Signature.getTypeArguments(signature);		for (int i= 0; i < typeArguments.length; i++)			if (Arrays.equals(typeArguments[i], NULL_TYPE_SIGNATURE_ARRAY))				return NULL_TYPE_SIGNATURE_ARRAY;				if (signature[0] == Signature.C_SUPER) {			char[] type= new char[signature.length - 1];			System.arraycopy(signature, 1, type, 0, signature.length - 1);			return type;		}				return signature;	}