# HG changeset patch # User Tom Rodriguez # Date 1426545988 25200 # Node ID 6575b4e3f6298c007fe6bd4f10fdd957749c0cf2 # Parent f803f49c9ec423cb1c87a510c29fd61afd6a8c57 Don't force resolution for unloaded field types diff -r f803f49c9ec4 -r 6575b4e3f629 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java --- 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; } } diff -r f803f49c9ec4 -r 6575b4e3f629 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotUnresolvedJavaType.java --- 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; + } }