mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8255449: Improve the exception message of MethodHandles::permuteArguments
Reviewed-by: chegar, mchung
This commit is contained in:
parent
2a50c3f810
commit
2a2fa134c3
2 changed files with 75 additions and 16 deletions
|
@ -4739,23 +4739,24 @@ assert((int)twice.invokeExact(21) == 42);
|
|||
if (newType.returnType() != oldType.returnType())
|
||||
throw newIllegalArgumentException("return types do not match",
|
||||
oldType, newType);
|
||||
if (reorder.length == oldType.parameterCount()) {
|
||||
int limit = newType.parameterCount();
|
||||
boolean bad = false;
|
||||
for (int j = 0; j < reorder.length; j++) {
|
||||
int i = reorder[j];
|
||||
if (i < 0 || i >= limit) {
|
||||
bad = true; break;
|
||||
}
|
||||
Class<?> src = newType.parameterType(i);
|
||||
Class<?> dst = oldType.parameterType(j);
|
||||
if (src != dst)
|
||||
throw newIllegalArgumentException("parameter types do not match after reorder",
|
||||
oldType, newType);
|
||||
if (reorder.length != oldType.parameterCount())
|
||||
throw newIllegalArgumentException("old type parameter count and reorder array length do not match",
|
||||
oldType, Arrays.toString(reorder));
|
||||
|
||||
int limit = newType.parameterCount();
|
||||
for (int j = 0; j < reorder.length; j++) {
|
||||
int i = reorder[j];
|
||||
if (i < 0 || i >= limit) {
|
||||
throw newIllegalArgumentException("index is out of bounds for new type",
|
||||
i, newType);
|
||||
}
|
||||
if (!bad) return true;
|
||||
Class<?> src = newType.parameterType(i);
|
||||
Class<?> dst = oldType.parameterType(j);
|
||||
if (src != dst)
|
||||
throw newIllegalArgumentException("parameter types do not match after reorder",
|
||||
oldType, newType);
|
||||
}
|
||||
throw newIllegalArgumentException("bad reorder array: "+Arrays.toString(reorder));
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue