aboutsummaryrefslogtreecommitdiff
path: root/src/jdk/internal/dynalink/beans/StaticClassLinker.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jdk/internal/dynalink/beans/StaticClassLinker.java')
-rw-r--r--src/jdk/internal/dynalink/beans/StaticClassLinker.java29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/jdk/internal/dynalink/beans/StaticClassLinker.java b/src/jdk/internal/dynalink/beans/StaticClassLinker.java
index 5f80caea..ab9c884a 100644
--- a/src/jdk/internal/dynalink/beans/StaticClassLinker.java
+++ b/src/jdk/internal/dynalink/beans/StaticClassLinker.java
@@ -104,7 +104,7 @@ import jdk.internal.dynalink.support.Lookup;
class StaticClassLinker implements TypeBasedGuardingDynamicLinker {
private static final ClassValue<SingleClassStaticsLinker> linkers = new ClassValue<SingleClassStaticsLinker>() {
@Override
- protected SingleClassStaticsLinker computeValue(Class<?> clazz) {
+ protected SingleClassStaticsLinker computeValue(final Class<?> clazz) {
return new SingleClassStaticsLinker(clazz);
}
};
@@ -112,7 +112,7 @@ class StaticClassLinker implements TypeBasedGuardingDynamicLinker {
private static class SingleClassStaticsLinker extends AbstractJavaLinker {
private final DynamicMethod constructor;
- SingleClassStaticsLinker(Class<?> clazz) {
+ SingleClassStaticsLinker(final Class<?> clazz) {
super(clazz, IS_CLASS.bindTo(clazz));
// Map "staticClassObject.class" to StaticClass.getRepresentedClass(). Some adventurous soul could subclass
// StaticClass, so we use INSTANCE_OF validation instead of EXACT_CLASS.
@@ -126,7 +126,7 @@ class StaticClassLinker implements TypeBasedGuardingDynamicLinker {
* @return a dynamic method containing all overloads of a class' public constructor. If the class has no public
* constructors, returns null.
*/
- private static DynamicMethod createConstructorMethod(Class<?> clazz) {
+ private static DynamicMethod createConstructorMethod(final Class<?> clazz) {
if(clazz.isArray()) {
final MethodHandle boundArrayCtor = ARRAY_CTOR.bindTo(clazz.getComponentType());
return new SimpleDynamicMethod(StaticClassIntrospector.editConstructorMethodHandle(
@@ -144,7 +144,7 @@ class StaticClassLinker implements TypeBasedGuardingDynamicLinker {
}
@Override
- public GuardedInvocation getGuardedInvocation(LinkRequest request, LinkerServices linkerServices)
+ public GuardedInvocation getGuardedInvocation(final LinkRequest request, final LinkerServices linkerServices)
throws Exception {
final GuardedInvocation gi = super.getGuardedInvocation(request, linkerServices);
if(gi != null) {
@@ -160,22 +160,31 @@ class StaticClassLinker implements TypeBasedGuardingDynamicLinker {
}
return null;
}
+
+ @Override
+ SingleDynamicMethod getConstructorMethod(final String signature) {
+ return constructor != null? constructor.getMethodForExactParamTypes(signature) : null;
+ }
+ }
+
+ static Object getConstructorMethod(final Class<?> clazz, final String signature) {
+ return linkers.get(clazz).getConstructorMethod(signature);
}
- static Collection<String> getReadableStaticPropertyNames(Class<?> clazz) {
+ static Collection<String> getReadableStaticPropertyNames(final Class<?> clazz) {
return linkers.get(clazz).getReadablePropertyNames();
}
- static Collection<String> getWritableStaticPropertyNames(Class<?> clazz) {
+ static Collection<String> getWritableStaticPropertyNames(final Class<?> clazz) {
return linkers.get(clazz).getWritablePropertyNames();
}
- static Collection<String> getStaticMethodNames(Class<?> clazz) {
+ static Collection<String> getStaticMethodNames(final Class<?> clazz) {
return linkers.get(clazz).getMethodNames();
}
@Override
- public GuardedInvocation getGuardedInvocation(LinkRequest request, LinkerServices linkerServices) throws Exception {
+ public GuardedInvocation getGuardedInvocation(final LinkRequest request, final LinkerServices linkerServices) throws Exception {
final Object receiver = request.getReceiver();
if(receiver instanceof StaticClass) {
return linkers.get(((StaticClass)receiver).getRepresentedClass()).getGuardedInvocation(request,
@@ -185,7 +194,7 @@ class StaticClassLinker implements TypeBasedGuardingDynamicLinker {
}
@Override
- public boolean canLinkType(Class<?> type) {
+ public boolean canLinkType(final Class<?> type) {
return type == StaticClass.class;
}
@@ -201,7 +210,7 @@ class StaticClassLinker implements TypeBasedGuardingDynamicLinker {
}
@SuppressWarnings("unused")
- private static boolean isClass(Class<?> clazz, Object obj) {
+ private static boolean isClass(final Class<?> clazz, final Object obj) {
return obj instanceof StaticClass && ((StaticClass)obj).getRepresentedClass() == clazz;
}
}