# HG changeset patch # User Michael Haupt # Date 1361365847 -3600 # Node ID a44887443b0c041ccafb09434146ebb681655e60 # Parent 49921d2ee9ce5c648e189440a34d6a579e000dbd support for inner classes (local/member) in meta API diff -r 49921d2ee9ce -r a44887443b0c 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 Feb 20 08:58:29 2013 +0100 +++ b/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaType.java Wed Feb 20 14:10:47 2013 +0100 @@ -541,4 +541,19 @@ } } } + + @Test + public void memberClassesTest() { + for (Class c : classes) { + ResolvedJavaType type = runtime.lookupJavaType(c); + assertEquals(c.isLocalClass(), type.isLocal()); + assertEquals(c.isMemberClass(), type.isMember()); + Class enclc = c.getEnclosingClass(); + ResolvedJavaType enclt = type.getEnclosingType(); + assertFalse(enclc == null ^ enclt == null); + if (enclc != null) { + assertEquals(enclt, runtime.lookupJavaType(enclc)); + } + } + } } diff -r 49921d2ee9ce -r a44887443b0c 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 Feb 20 08:58:29 2013 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java Wed Feb 20 14:10:47 2013 +0100 @@ -259,4 +259,19 @@ * Returns the class file path - if available - of this type, or {@code null}. */ URL getClassFilePath(); + + /** + * Returns {@code true} if the type is a local type. + */ + boolean isLocal(); + + /** + * Returns {@code true} if the type is a member type. + */ + boolean isMember(); + + /** + * Returns the enclosing type of this type, if it exists, or {@code null}. + */ + ResolvedJavaType getEnclosingType(); } diff -r 49921d2ee9ce -r a44887443b0c 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 Feb 20 08:58:29 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Wed Feb 20 14:10:47 2013 +0100 @@ -509,4 +509,20 @@ } return cls.getResource(name + ".class"); } + + @Override + public boolean isLocal() { + return mirror().isLocalClass(); + } + + @Override + public boolean isMember() { + return mirror().isMemberClass(); + } + + @Override + public ResolvedJavaType getEnclosingType() { + final Class encl = mirror().getEnclosingClass(); + return encl == null ? null : fromClass(encl); + } } diff -r 49921d2ee9ce -r a44887443b0c 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 Feb 20 08:58:29 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java Wed Feb 20 14:10:47 2013 +0100 @@ -195,4 +195,19 @@ public URL getClassFilePath() { return null; } + + @Override + public boolean isLocal() { + return false; + } + + @Override + public boolean isMember() { + return false; + } + + @Override + public ResolvedJavaType getEnclosingType() { + return null; + } }