# HG changeset patch # User Josef Eisl # Date 1414500204 -3600 # Node ID e8c54fd622a42b7c7a31b17eb364ee50a3d86e33 # Parent d28acaa6368051d8188b8ebefe5079c90b04c788 Add ResolvedJavaType.getImplementor(). diff -r d28acaa63680 -r e8c54fd622a4 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java Wed Oct 29 13:31:25 2014 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java Tue Oct 28 13:43:24 2014 +0100 @@ -179,6 +179,14 @@ ResolvedJavaType[] getInterfaces(); /** + * Gets the the single implementor of this type. + * + * @return {@code null} if there is no implementor or this type is not an interface, the + * implementor if there is only one, or {@code this} if there are more than one. + */ + ResolvedJavaType getImplementor(); + + /** * Walks the class hierarchy upwards and returns the least common class that is a superclass of * both the current and the given type. * diff -r d28acaa63680 -r e8c54fd622a4 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Wed Oct 29 13:31:25 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Tue Oct 28 13:43:24 2014 +0100 @@ -151,15 +151,11 @@ if (isArray()) { return getElementalType().isFinal() ? this : null; } else if (isInterface()) { - final long implementorMetaspaceKlass = runtime().getCompilerToVM().getKlassImplementor(getMetaspaceKlass()); - - // No implementor. - if (implementorMetaspaceKlass == 0) { + HotSpotResolvedObjectType type = getImplementor(); + if (type == null) { return null; } - HotSpotResolvedObjectType type = fromMetaspaceKlass(implementorMetaspaceKlass); - /* * If the implementor field contains itself that indicates that the interface has more * than one implementors (see: InstanceKlass::add_implementor). The isInterface check @@ -224,6 +220,21 @@ return interfaces; } + @Override + public HotSpotResolvedObjectType getImplementor() { + if (!isInterface()) { + return null; + } + final long implementorMetaspaceKlass = runtime().getCompilerToVM().getKlassImplementor(getMetaspaceKlass()); + + // No implementor. + if (implementorMetaspaceKlass == 0) { + return null; + } + + return fromMetaspaceKlass(implementorMetaspaceKlass); + } + public HotSpotResolvedObjectType getSupertype() { if (isArray()) { ResolvedJavaType componentType = getComponentType(); diff -r d28acaa63680 -r e8c54fd622a4 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java Wed Oct 29 13:31:25 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java Tue Oct 28 13:43:24 2014 +0100 @@ -104,6 +104,11 @@ } @Override + public ResolvedJavaType getImplementor() { + return null; + } + + @Override public ResolvedJavaType findLeastCommonAncestor(ResolvedJavaType otherType) { return null; }