constructor accepts a class name string instead of a class metadata object
authorThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Sat, 14 Dec 2024 16:51:01 +0000 (16:51 +0000)
committerThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Sat, 14 Dec 2024 16:51:01 +0000 (16:51 +0000)
developer/javacđź–‰/Mosaic_AllMethodsPublicProxy.java

index 4f38092..cdcd82f 100644 (file)
@@ -187,6 +187,26 @@ public class Mosaic_AllMethodsPublicProxy {
     this.map = new FunctionSignature_To_Handle_Map(target_type);
   }
 
+  // Constructor accepting a fully qualified class name
+  public Mosaic_AllMethodsPublicProxy(String fully_qualified_class_name) throws ClassNotFoundException {
+    try {
+      Class<?> clazz = Class.forName(fully_qualified_class_name);
+
+      // Use MethodHandles to ensure access to private classes
+      MethodHandles.Lookup lookup = MethodHandles.lookup();
+      MethodHandles.Lookup private_lookup = MethodHandles.privateLookupIn(clazz, lookup);
+
+      this.target_type = clazz;
+      this.map = new FunctionSignature_To_Handle_Map(clazz);
+
+    } catch (ClassNotFoundException e) {
+      throw new ClassNotFoundException("Class not found: " + fully_qualified_class_name, e);
+    } catch (IllegalAccessException e) {
+      throw new RuntimeException("Failed to access private class: " + fully_qualified_class_name, e);
+    }
+  }
+
+
   public Object construct(String constructor_name, Object... arg_list) {
     try {
       // Resolve the constructor signature