changeset 19917:6575b4e3f629

Don't force resolution for unloaded field types
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Mon, 16 Mar 2015 15:46:28 -0700
parents f803f49c9ec4
children c278c8c727aa
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotUnresolvedJavaType.java
diffstat 2 files changed, 17 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java	Mon Mar 16 13:47:45 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java	Mon Mar 16 15:46:28 2015 -0700
@@ -149,9 +149,9 @@
 
     @Override
     public JavaType getType() {
-        if (!(type instanceof ResolvedJavaType)) {
+        if (type instanceof HotSpotUnresolvedJavaType) {
             // Don't allow unresolved types to hang around forever
-            ResolvedJavaType resolved = type.resolve(holder);
+            ResolvedJavaType resolved = ((HotSpotUnresolvedJavaType) type).reresolve(holder);
             if (resolved != null) {
                 type = resolved;
             }
@@ -204,7 +204,7 @@
         }
         try {
             return holder.mirror().getDeclaredField(name);
-        } catch (NoSuchFieldException e) {
+        } catch (NoSuchFieldException | NoClassDefFoundError e) {
             return null;
         }
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotUnresolvedJavaType.java	Mon Mar 16 13:47:45 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotUnresolvedJavaType.java	Mon Mar 16 15:46:28 2015 -0700
@@ -88,4 +88,18 @@
     public ResolvedJavaType resolve(ResolvedJavaType accessingClass) {
         return (ResolvedJavaType) runtime.lookupType(getName(), (HotSpotResolvedObjectType) accessingClass, true);
     }
+
+    /**
+     * Try to find a loaded version of this class.
+     *
+     * @param accessingClass
+     * @return the resolved class or null.
+     */
+    ResolvedJavaType reresolve(HotSpotResolvedObjectType accessingClass) {
+        JavaType type = runtime.lookupType(getName(), accessingClass, false);
+        if (type instanceof ResolvedJavaType) {
+            return (ResolvedJavaType) type;
+        }
+        return null;
+    }
 }