# HG changeset patch # User Josef Eisl # Date 1414683796 -3600 # Node ID 0a17944b7bafab6de6b925a3607ba28ff702e2c8 # Parent 660875e586f0e853c73c932ee8faeb0741bab3f7 Throw an exception if ResolvedJavaType.getImplementor() is called with a non-interface type. diff -r 660875e586f0 -r 0a17944b7baf graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaType.java --- 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) { diff -r 660875e586f0 -r 0a17944b7baf 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 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(); diff -r 660875e586f0 -r 0a17944b7baf 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 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()); diff -r 660875e586f0 -r 0a17944b7baf 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 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