Mercurial > hg > graal-jvmci-8
changeset 18193:0a17944b7baf
Throw an exception if ResolvedJavaType.getImplementor() is called with a non-interface type.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Thu, 30 Oct 2014 16:43:16 +0100 |
parents | 660875e586f0 |
children | b7226cb963c3 |
files | graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaType.java 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 | 4 files changed, 19 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaType.java Wed Oct 29 19:07:32 2014 +0100 +++ b/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaType.java Thu Oct 30 16:43:16 2014 +0100 @@ -35,6 +35,7 @@ import sun.reflect.ConstantPool; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.*; /** * Tests for {@link ResolvedJavaType}. @@ -387,9 +388,6 @@ @Test public void getImplementorTest() { - ResolvedJavaType base = metaAccess.lookupJavaType(Base.class); - assertNull(base.getImplementor()); - ResolvedJavaType iNi = metaAccess.lookupJavaType(NoImplementor.class); assertNull(iNi.getImplementor()); @@ -418,6 +416,18 @@ assertEquals(aSai2, iSai2.getImplementor()); } + @Test(expected = GraalInternalError.class) + public void getImplementorTestClassReceiver() { + ResolvedJavaType base = metaAccess.lookupJavaType(Base.class); + base.getImplementor(); + } + + @Test(expected = GraalInternalError.class) + public void getImplementorTestPrimitiveReceiver() { + ResolvedJavaType primitive = metaAccess.lookupJavaType(int.class); + primitive.getImplementor(); + } + @Test public void getComponentTypeTest() { for (Class<?> c : classes) {
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java Wed Oct 29 19:07:32 2014 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java Thu Oct 30 16:43:16 2014 +0100 @@ -179,10 +179,11 @@ ResolvedJavaType[] getInterfaces(); /** - * Gets the the single implementor of this type. + * Gets the the single implementor of this type. Calling this method on a non-interface type + * causes an exception. * - * @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. + * @return {@code null} if there is no implementor, the implementor if there is only one, or + * {@code this} if there are more than one. */ ResolvedJavaType getImplementor();
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Wed Oct 29 19:07:32 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Thu Oct 30 16:43:16 2014 +0100 @@ -223,7 +223,7 @@ @Override public HotSpotResolvedObjectType getImplementor() { if (!isInterface()) { - return null; + throw new GraalInternalError("Cannot call getImplementor() on a non-interface type: " + this); } final long implementorMetaspaceKlass = runtime().getCompilerToVM().getKlassImplementor(getMetaspaceKlass());
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java Wed Oct 29 19:07:32 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java Thu Oct 30 16:43:16 2014 +0100 @@ -105,7 +105,7 @@ @Override public ResolvedJavaType getImplementor() { - return null; + throw new GraalInternalError("Cannot call getImplementor() on a non-interface type: " + this); } @Override