import java.math.BigInteger;
import java.security.ProtectionDomain;
+import java.beans.Introspector;
+
public class Reflection {
interface GenericSuperShort<XYZ> {
}*/
}
- public static void main(String[] args) {
+ public static void main(String[] args) throws Exception {
//BigInteger bi = new BigInteger("-1");
//System.out.println(bi);
- StringBuilder sb = new StringBuilder(0);
+ /*StringBuilder sb = new StringBuilder(0);
sb.append('[');
sb.append(']');
- System.out.println(sb.toString());
+ System.out.println(sb.toString());*/
+
+ //Class cls = Class.forName("groovy.runtime.metaclass.Logger.LoggerMetaClass");
+ //Class cls2 = Class.forName("groovy.runtime.metaclass.[Ljava.lang.Object;MetaClass");
+ //Class cls2 = Class.forName("[Ljava.lang.Object;BeanInfo");
+ Class cls = Object[].class;
+ System.out.println("Bean introspection do not ignore bean info: " + cls.getSimpleName());
+ System.out.println("Bean introspection do not ignore bean info: " + cls.getName());
+ Object obj = Introspector.getBeanInfo(cls);
/* TODO: Enumerate all methods in Class.class
Method[] methods = Collection.class.getMethods();
* Special class loader, which when running on Sun VM allows to generate accessor classes for any method
*/
public class SunClassLoader extends ClassLoader implements Opcodes {
+
private void loadMagic() {
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
cw.visit(Opcodes.V1_4, Opcodes.ACC_PUBLIC, "sun/reflect/GroovyMagic", null, "sun/reflect/MagicAccessorImpl", null);
public static void main(String[] args) {
SunClassLoader sun = new SunClassLoader();
sun.loadMagic();
+
+ Class cls = sun.loadClass("java/lang/Object");
}
}
public static boolean isBuiltinClass (String cname) {
char c = cname.charAt(0);
+ // TODO: Fix for Groovy's model-checking
+ // TODO: Handling impossible names in Groovy, e.g., [Ljava.lang.Object;BeanInfo
+ if (cname.indexOf(';') != -1 && cname.indexOf(';') != cname.length() - 1) {
+ return false;
+ }
+
// array class
if ((c == '[') || cname.endsWith("[]")) {
return true;
return typeName;
}
- int i=typeName.indexOf('[');
+ // TODO: Fix for Groovy's model-checking
+ int i=typeName.indexOf("[]");
if (i>0){ // the sort of "<type>[]"
StringBuilder sb = new StringBuilder();
sb.append('[');
public int findSystemClass__Ljava_lang_String_2__Ljava_lang_Class_2 (MJIEnv env, int objRef, int nameRef) {
String cname = env.getStringObject(nameRef);
- checkForIllegalName(env, cname);
- if(env.hasException()) {
- return MJIEnv.NULL;
- }
-
ClassLoaderInfo cl = ClassLoaderInfo.getCurrentSystemClassLoader();
+ // TODO: Fix for Groovy's model-checking
+ // Get a clean class name and try to resolve
+ ClassInfo cir = cl.getAlreadyResolvedClassInfo(Types.getClassNameFromTypeName(cname));
+ if (cir != null) {
+ checkForIllegalName(env, cname);
+ if(env.hasException()) {
+ return MJIEnv.NULL;
+ }
+ }
+
ClassInfo ci = cl.getResolvedClassInfo(cname);
if(!ci.isRegistered()) {
}
if((name.indexOf('/') != -1) || (name.charAt(0) == '[')) {
+ //env.throwException("java.lang.ClassNotFoundException", "IllegalName: " + name);
env.throwException("java.lang.NoClassDefFoundError", "IllegalName: " + name);
}
}