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