From ceaf85e8b720ab8c3d8b74cd5429a40dfef09294 Mon Sep 17 00:00:00 2001 From: mwguy Date: Fri, 17 May 2019 00:29:11 +0300 Subject: [PATCH] Add class loading for Jar files and API for arrays --- package.php.yml | 2 +- sdk/java/reflection/JarClassLoader.php | 15 +++++++ sdk/java/reflection/ReflectionArray.php | 35 +++++++++++++++ sdk/java/reflection/ReflectionClass.php | 3 +- .../JavaReflectionExtension.java | 8 ++-- .../classes/JarClassLoader.java | 43 +++++++++++++++++++ .../classes/ReflectionArray.java | 41 ++++++++++++++++++ .../classes/ReflectionClass.java | 5 +++ 8 files changed, 146 insertions(+), 6 deletions(-) create mode 100644 sdk/java/reflection/JarClassLoader.php create mode 100644 sdk/java/reflection/ReflectionArray.php create mode 100644 src-jvm/main/java/org/venity/javareflection/classes/JarClassLoader.java create mode 100644 src-jvm/main/java/org/venity/javareflection/classes/ReflectionArray.java diff --git a/package.php.yml b/package.php.yml index 721b0b9..e2ead48 100644 --- a/package.php.yml +++ b/package.php.yml @@ -1,5 +1,5 @@ name: java-reflection-ext -version: 1.1.1 +version: 1.2.0 description: Java Reflection API plugins: diff --git a/sdk/java/reflection/JarClassLoader.php b/sdk/java/reflection/JarClassLoader.php new file mode 100644 index 0000000..483e731 --- /dev/null +++ b/sdk/java/reflection/JarClassLoader.php @@ -0,0 +1,15 @@ + { + public ReflectionArray(Environment env, Array wrappedObject) { + super(env, wrappedObject); + } + + public ReflectionArray(Environment env, ClassEntity clazz) { + super(env, clazz); + } + + @Reflection.Signature + public static ReflectionObject newInstance(Environment environment, Class componentType, int length) { + return new ReflectionObject(environment, Array.newInstance(componentType, length)); + } + + @Reflection.Signature + public static int getLength(ReflectionObject object) { + return Array.getLength(object.getWrappedObject()); + } + + @Reflection.Signature + public static ReflectionObject get(Environment environment, ReflectionObject object, int id) { + return new ReflectionObject(environment, Array.get(object.getWrappedObject(), id)); + } + + @Reflection.Signature + public static void set(Environment environment, ReflectionObject object, int id, ReflectionObject reflectionObject) { + Array.set(object.getWrappedObject(), id, reflectionObject.getWrappedObject()); + } +} diff --git a/src-jvm/main/java/org/venity/javareflection/classes/ReflectionClass.java b/src-jvm/main/java/org/venity/javareflection/classes/ReflectionClass.java index 262d4fd..bb7f061 100644 --- a/src-jvm/main/java/org/venity/javareflection/classes/ReflectionClass.java +++ b/src-jvm/main/java/org/venity/javareflection/classes/ReflectionClass.java @@ -32,6 +32,11 @@ public static ReflectionClass forName(Environment env, String className) throws return new ReflectionClass(env, Class.forName(className)); } + @Reflection.Signature + public static ReflectionClass forName(Environment env, String className, JarClassLoader classLoader) throws ClassNotFoundException { + return new ReflectionClass(env, Class.forName(className, false, classLoader.getClassLoader())); + } + @Reflection.Signature public ReflectionObject newInstance() throws IllegalAccessException, InstantiationException { return new ReflectionObject(__env__, __wrappedObject.newInstance());