/** * Finds a Java class representation for the provided object. If the object was created via * {@link #asTruffleObject(java.lang.Object) asTruffleObject(original)} call, then it is * unwrapped and the result is equal to {@link #asTruffleObject(java.lang.Object) * asTruffleObject(original.getClass())}. * <p> * This method works only on objects that wrap plain Java objects. * * @param obj object expected to be created by {@link #asTruffleObject(java.lang.Object)} or * similar methods * @return object representing {@link #asTruffleObject(java.lang.Object) wrapper} around * original Java object's {@link Object#getClass() type} if any. Otherwise * <code>null</code> * @since 0.26 */ public static TruffleObject toJavaClass(TruffleObject obj) { if (obj instanceof JavaObject) { JavaObject receiver = (JavaObject) obj; if (receiver.obj == null) { return JavaObject.NULL; } else { return JavaObject.forClass(receiver.obj.getClass(), receiver.languageContext); } } else { return null; } }
return JavaObject.forStaticClass((Class<?>) obj, languageContext); } else { return JavaObject.forClass((Class<?>) obj, languageContext);
public Object access(JavaObject object, String name) { if (TruffleOptions.AOT || object.isNull()) { throw UnsupportedMessageException.raise(Message.READ); } boolean isStatic = object.isStaticClass(); Class<?> lookupClass = object.getLookupClass(); JavaFieldDesc foundField = lookupField().execute(lookupClass, name, isStatic); if (foundField != null) { return readField().execute(foundField, object); } JavaMethodDesc foundMethod = lookupMethod().execute(lookupClass, name, isStatic); if (foundMethod != null) { return new JavaFunctionObject(foundMethod, object.obj, object.languageContext); } if (isStatic) { LookupInnerClassNode lookupInnerClassNode = lookupInnerClass(); if ("class".equals(name)) { return JavaObject.forClass(lookupClass, object.languageContext); } Class<?> innerclass = lookupInnerClassNode.execute(lookupClass, name); if (innerclass != null) { return JavaObject.forStaticClass(innerclass, object.languageContext); } } throw UnknownIdentifierException.raise(name); }