Skip to content

Commit 619b4aa

Browse files
authored
Merge pull request openjdk#30 from lahodaj/matchers-experiment-new-carriers
Carriers update for matchers-experiment
2 parents 92e995b + 338175f commit 619b4aa

File tree

7 files changed

+194
-975
lines changed

7 files changed

+194
-975
lines changed

src/java.base/share/classes/java/lang/reflect/MemberPattern.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525

2626
package java.lang.reflect;
2727

28-
import jdk.internal.reflect.CallerSensitive;
29-
import jdk.internal.reflect.Reflection;
3028
import sun.reflect.generics.factory.CoreReflectionFactory;
3129
import sun.reflect.generics.factory.GenericsFactory;
3230
import sun.reflect.generics.repository.ExecutableRepository;
@@ -35,8 +33,8 @@
3533

3634
import java.lang.annotation.Annotation;
3735
import java.lang.invoke.MethodHandle;
36+
import java.lang.invoke.MethodHandles;
3837
import java.lang.invoke.MethodType;
39-
import java.lang.runtime.Carriers;
4038
import java.util.ArrayList;
4139
import java.util.Arrays;
4240
import java.util.StringJoiner;
@@ -405,14 +403,14 @@ public Object[] invoke(Object matchCandidate)
405403
Method method = getDeclaringClass().getDeclaredMethod(underlyingName, matchCandidate.getClass(), MethodHandle.class);
406404
method.setAccessible(override);
407405
MethodType bindingMT = MethodType.methodType(
408-
Object.class,
406+
Object[].class,
409407
Arrays.stream(this.getPatternBindings())
410408
.map(PatternBinding::getType)
411409
.toArray(Class[]::new)
412410
);
413-
MethodHandle initializingConstructor = Carriers.initializingConstructor(bindingMT);
411+
MethodHandle pack = CollectHolder.COLLECT_TO_ARRAY.asType(bindingMT);
414412

415-
return (Object[])Carriers.boxedComponentValueArray(bindingMT).invoke(method.invoke(matchCandidate, matchCandidate, initializingConstructor));
413+
return (Object[])method.invoke(matchCandidate, matchCandidate, pack);
416414
} catch (Throwable e) {
417415
throw new MatchException(e.getMessage(), e);
418416
}
@@ -450,4 +448,20 @@ public AnnotatedType getAnnotatedReturnType() {
450448
String getMangledName() {
451449
return mangle(this.getDeclaringClass(), Arrays.stream(getPatternBindings()).map(pb -> pb.getType()).toArray(Class[]::new));
452450
}
451+
452+
private static class CollectHolder {
453+
private static Object[] collect(Object... params) {
454+
return params;
455+
}
456+
457+
static final MethodHandle COLLECT_TO_ARRAY;
458+
459+
static {
460+
try {
461+
COLLECT_TO_ARRAY = MethodHandles.lookup().findStatic(CollectHolder.class, "collect", MethodType.methodType(Object[].class, Object[].class));
462+
} catch (NoSuchMethodException | IllegalAccessException ex) {
463+
throw new IllegalStateException(ex);
464+
}
465+
}
466+
}
453467
}

0 commit comments

Comments
 (0)