Mercurial > hg > truffle
changeset 18182:e8c54fd622a4
Add ResolvedJavaType.getImplementor().
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Tue, 28 Oct 2014 13:43:24 +0100 |
parents | d28acaa63680 |
children | d3dfd1f9545f |
files | graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java |
diffstat | 3 files changed, 30 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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. *
--- 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();
--- 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; }