Mercurial > hg > graal-jvmci-8
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; + } }