From 425de7ef97bfa35631211e211228b039a6caa775 Mon Sep 17 00:00:00 2001 From: Thomas Walker Lynch Date: Sat, 14 Dec 2024 16:46:24 +0000 Subject: [PATCH] adding constructor invocation to AllMethodsPublicProxy --- developer/bash/Mosaic | 2 + .../Mosaic_AllMethodsPublicProxy.java" | 123 +++++++++++++++--- .../Mosaic_FunctionSignature.xjava" | 77 +++++++++++ .../Mosaic_IsPrimitive.java" | 1 + release/Mosaic.jar | Bin 949226 -> 955562 bytes .../Test_FunctionSignature.java" | 95 ++++++++++++++ .../Test_IsPrimitive.java" | 118 +++++++++++++++++ tester/log/log.txt | 22 ++++ .../tool\360\237\226\211/bash_wrapper_list" | 9 +- "tester/tool\360\237\226\211/env" | 2 +- 10 files changed, 428 insertions(+), 21 deletions(-) create mode 100755 developer/bash/Mosaic create mode 100644 "developer/javac\360\237\226\211/Mosaic_FunctionSignature.xjava" create mode 100644 "tester/javac\360\237\226\211/Test_FunctionSignature.java" create mode 100644 "tester/javac\360\237\226\211/Test_IsPrimitive.java" diff --git a/developer/bash/Mosaic b/developer/bash/Mosaic new file mode 100755 index 0000000..ba5b241 --- /dev/null +++ b/developer/bash/Mosaic @@ -0,0 +1,2 @@ +#!/bin/bash +java com.ReasoningTechnology."Mosaic".Mosaic diff --git "a/developer/javac\360\237\226\211/Mosaic_AllMethodsPublicProxy.java" "b/developer/javac\360\237\226\211/Mosaic_AllMethodsPublicProxy.java" index ea1a0ed..4f38092 100644 --- "a/developer/javac\360\237\226\211/Mosaic_AllMethodsPublicProxy.java" +++ "b/developer/javac\360\237\226\211/Mosaic_AllMethodsPublicProxy.java" @@ -26,13 +26,13 @@ class FunctionSignature { this.parameter_types = method.getParameterTypes(); } - private static Class[] resolve_parameter_types(Object[] args){ - Class[] parameter_types = new Class[args.length]; - for( int i = 0; i < args.length; i++ ){ - if( args[i] instanceof isPrimitive ){ - parameter_types[i] = ((isPrimitive) args[i]).get_type(); - }else if( args[i] != null ){ - parameter_types[i] = args[i].getClass(); + private static Class[] resolve_parameter_types(Object[] arg_list){ + Class[] parameter_types = new Class[arg_list.length]; + for( int i = 0; i < arg_list.length; i++ ){ + if( arg_list[i] instanceof Mosaic_IsPrimitive ){ + parameter_types[i] = ((Mosaic_IsPrimitive) arg_list[i]).get_type(); + }else if( arg_list[i] != null ){ + parameter_types[i] = arg_list[i].getClass(); }else{ parameter_types[i] = null; } @@ -76,7 +76,6 @@ class FunctionSignature { return sb.toString(); } - } class FunctionSignature_To_Handle_Map { @@ -87,6 +86,53 @@ class FunctionSignature_To_Handle_Map { add_class(class_metadata); } + private void add_class(Class class_metadata){ + try{ + MethodHandles.Lookup lookup = MethodHandles.lookup(); + MethodHandles.Lookup private_lookup = MethodHandles.privateLookupIn(class_metadata ,lookup); + + // Map constructors + for(Constructor constructor : class_metadata.getDeclaredConstructors()){ + Class[] parameter_types = constructor.getParameterTypes(); + MethodType method_type = MethodType.methodType(class_metadata, parameter_types); + MethodHandle constructor_handle; + + if((constructor.getModifiers() & Modifier.PRIVATE) != 0){ + constructor_handle = private_lookup.findConstructor(class_metadata, method_type); + } else{ + constructor_handle = lookup.findConstructor(class_metadata, method_type); + } + + FunctionSignature signature = new FunctionSignature("", parameter_types); + map.put(signature, constructor_handle); + } + + // Map methods + for(Method method : class_metadata.getDeclaredMethods()){ + Class[] parameter_types = method.getParameterTypes(); + MethodType method_type = MethodType.methodType( + method.getReturnType() ,parameter_types + ); + MethodHandle method_handle; + + if((method.getModifiers() & Modifier.PRIVATE) != 0){ + method_handle = private_lookup.findSpecial(class_metadata ,method.getName() ,method_type ,class_metadata); + } else{ + method_handle = lookup.findVirtual(class_metadata ,method.getName() ,method_type); + } + + FunctionSignature signature = new FunctionSignature(method); + map.put(signature ,method_handle); + } + } catch(Throwable t){ + System.out.println("FunctionSignature_To_Handle_Map::add_class exception:"); + t.printStackTrace(); + } + } + + + /* + private void add_class(Class class_metadata){ try{ MethodHandles.Lookup lookup = MethodHandles.lookup(); @@ -99,7 +145,7 @@ class FunctionSignature_To_Handle_Map { ); MethodHandle method_handle; - if( (method.getModifiers() & java.lang.reflect.Modifier.PRIVATE) != 0 ){ + if((method.getModifiers() & java.lang.reflect.Modifier.PRIVATE) != 0 ){ method_handle = private_lookup.findSpecial(class_metadata ,method.getName() ,method_type ,class_metadata); }else{ method_handle = lookup.findVirtual(class_metadata ,method.getName() ,method_type); @@ -113,6 +159,8 @@ class FunctionSignature_To_Handle_Map { t.printStackTrace(); } } + */ + public MethodHandle get_handle(FunctionSignature signature){ return map.get(signature); @@ -122,7 +170,7 @@ class FunctionSignature_To_Handle_Map { public String toString() { StringBuilder sb = new StringBuilder(); sb.append("FunctionSignature to MethodHandle Map:\n"); - for (Map.Entry entry : map.entrySet()) { + for(Map.Entry entry : map.entrySet()) { sb.append(" ").append(entry.getKey()).append(" -> ").append(entry.getValue()).append("\n"); } return sb.toString(); @@ -139,26 +187,65 @@ public class Mosaic_AllMethodsPublicProxy { this.map = new FunctionSignature_To_Handle_Map(target_type); } + public Object construct(String constructor_name, Object... arg_list) { + try { + // Resolve the constructor signature + FunctionSignature signature = new FunctionSignature(constructor_name, arg_list); + MethodHandle handle = map.get_handle(signature); + + if (handle == null) { + throw new NoSuchMethodException("No constructor found for signature: " + signature.get_method_name()); + } + + // Unwrap Mosaic_IsPrimitive instances + Object[] unwrapped_args = new Object[arg_list.length]; + for (int i = 0; i < arg_list.length; i++) { + if (arg_list[i] instanceof Mosaic_IsPrimitive) { + unwrapped_args[i] = ((Mosaic_IsPrimitive) arg_list[i]).get_value(); + } else { + unwrapped_args[i] = arg_list[i]; + } + } + + // Invoke the constructor handle + return handle.invokeWithArguments(unwrapped_args); + + } catch (Throwable t) { + System.out.println("Mosaic_AllMethodsPublicProxy::construct exception:"); + t.printStackTrace(); + return null; + } + } + + public Object invoke(Object target_instance, String method_name, Object... arg_list) { try { - if (target_instance == null || !target_type.isInstance(target_instance)) { + if(target_instance == null || !target_type.isInstance(target_instance)) { System.out.println("Warning: Instance is not of type " + target_type.getName()); } - // Resolve the function signature + // Resolve the function signature. + // The IsPrimtiive tags are needed here so as to form a correct signature for + // looking up the handle. + // FunctionSignature signature = new FunctionSignature(method_name, arg_list); MethodHandle handle = map.get_handle(signature); System.out.println( "invoked with signature: " + signature.toString() ); - if (handle == null) { + if(handle == null) { throw new NoSuchMethodException("No method found for signature: " + signature.get_method_name()); } - // Unwrap isPrimitive instances in arguments + // This removes the IsPrimitive tags (unwrap the containted + // values). The `get_value` will be boxed in the Java Wrappers, + // i.e. `int` values wills till be Integer, because it is + // Object type. Later `invokeWithArguments` below will unbox the + // primitive values as it is aware of the types required for the call. + // Object[] unwrapped_args = new Object[arg_list.length]; - for (int i = 0; i < arg_list.length; i++) { - if (arg_list[i] instanceof isPrimitive) { - unwrapped_args[i] = ((isPrimitive) arg_list[i]).get_value(); + for(int i = 0; i < arg_list.length; i++) { + if(arg_list[i] instanceof Mosaic_IsPrimitive) { + unwrapped_args[i] = ((Mosaic_IsPrimitive) arg_list[i]).get_value(); } else { unwrapped_args[i] = arg_list[i]; } @@ -166,7 +253,7 @@ public class Mosaic_AllMethodsPublicProxy { return handle.bindTo(target_instance).invokeWithArguments(unwrapped_args); - } catch (Throwable t) { + }catch(Throwable t) { System.out.println("Mosaic_AllMethodsPublicProxy::invoke exception:"); t.printStackTrace(); return null; diff --git "a/developer/javac\360\237\226\211/Mosaic_FunctionSignature.xjava" "b/developer/javac\360\237\226\211/Mosaic_FunctionSignature.xjava" new file mode 100644 index 0000000..083ca75 --- /dev/null +++ "b/developer/javac\360\237\226\211/Mosaic_FunctionSignature.xjava" @@ -0,0 +1,77 @@ +package com.ReasoningTechnology.Mosaic; + +import java.lang.reflect.Method; +import java.util.Arrays; +import com.ReasoningTechnology.Mosaic.Mosaic_IsPrimitive; + +public class Mosaic_FunctionSignature { + private final String method_name; + private final Class[] parameter_types; + + public FunctionSignature(String method_name ,Class[] parameter_types){ + this.method_name = method_name; + this.parameter_types = parameter_types; + } + + public FunctionSignature(String method_name ,Object[] args){ + this.method_name = method_name; + this.parameter_types = resolve_parameter_types(args); + } + + public FunctionSignature(Method method){ + this.method_name = method.getName(); + this.parameter_types = method.getParameterTypes(); + } + + private static Class[] resolve_parameter_types(Object[] arg_list){ + Class[] parameter_types = new Class[arg_list.length]; + for( int i = 0; i < arg_list.length; i++ ){ + if( arg_list[i] instanceof Mosaic_IsPrimitive ){ + parameter_types[i] = ((Mosaic_IsPrimitive) arg_list[i]).get_type(); + }else if( arg_list[i] != null ){ + parameter_types[i] = arg_list[i].getClass(); + }else{ + parameter_types[i] = null; + } + } + return parameter_types; + } + + public String get_method_name(){ + return method_name; + } + + public Class[] get_parameter_types(){ + return parameter_types; + } + + @Override + public boolean equals(Object o){ + if( this == o ) return true; + if( o == null || getClass() != o.getClass() ) return false; + FunctionSignature signature = (FunctionSignature) o; + return method_name.equals(signature.method_name) && + java.util.Arrays.equals(parameter_types ,signature.parameter_types); + } + + @Override + public int hashCode(){ + int result = method_name.hashCode(); + result = 31 * result + java.util.Arrays.hashCode(parameter_types); + return result; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(method_name).append("("); + for (int i = 0; i < parameter_types.length; i++) { + sb.append(parameter_types[i].getSimpleName()); + if (i < parameter_types.length - 1) sb.append(", "); + } + sb.append(")"); + return sb.toString(); + } + +} + diff --git "a/developer/javac\360\237\226\211/Mosaic_IsPrimitive.java" "b/developer/javac\360\237\226\211/Mosaic_IsPrimitive.java" index a50c6b5..e0d6652 100644 --- "a/developer/javac\360\237\226\211/Mosaic_IsPrimitive.java" +++ "b/developer/javac\360\237\226\211/Mosaic_IsPrimitive.java" @@ -16,6 +16,7 @@ public class Mosaic_IsPrimitive { } public Class get_type(){ + if( value == null ) return null; if( value instanceof Integer ) return int.class; if( value instanceof Boolean ) return boolean.class; if( value instanceof Double ) return double.class; diff --git a/release/Mosaic.jar b/release/Mosaic.jar index e77c1c471f440e0c6499cbdad38bca53c2a2293e..7b9480097840a69a3de2c8b8b5ed72ac8bc11d08 100644 GIT binary patch delta 11830 zcmaKS1yq&a5-%JY&pDu!goGg7-6`GO(%s!2r9nXY6Der{>2B%n5)|o1Qd;00^samT z-*?|*t-Zeen{Q_JoV_!{pTeX(9L?NqoE+6{ ztQ<|;JzOoA&FoFw+>(+O+;B7>_rPe3nxbVV^D`5ZYx|@d=}>pkre~5zP4k$NMB}iS zzPc+CaLX<%u%3N~1?o$!hdxMa@7wBIf^c~MFj@`g-!vyyBa&*C^<1nvxE4G(5#CH& zyt}<*bB-M5rRX4vLx!oE2F9drIB;yfTQ}YRHLqB_^uTn|bMDLvd3orI95KHG(Gjv! zEH(*~hFrsgF_E(y-kD660e?<>m z+0HTQ2L9}L@VWV5etjh|*jhO@TOxLz)3D0?GP!BT$w4oJJfH+dx0-0?`(1-1-93=G z5hb8>T{G?L%uZ=nXUfKqubaAANzv&?<-Am-JrN%t6x=1|nRB~f+`ObC3}&|s4^3qz4+Z|ZIIn-EK(OP>VA zMQ{um1XfK5^=Ged{+P%&lg-&0dLX_^$-jwgsvyoxtrJhS^U^|psy2UkqH2(0vS%of z^Tg4#X_&M2Y50_f9McyIyFxv^s&8*L-sgC}$TQ|=$hR9jCx3jzW3S9waR@uFNqlM5 zUNZb6yJt5xDF7zhnsRsH?U!50HOb@~Sc*Rwn6<$#;8iLYlN4wuc(`+b+<_nN^V+eo zTeJ7fUyS`AHAMf-M*facLP6q@ue5xCJ6!{gSK4bs_R8Jn9Xl7nDTeTY5x1&wx770v zKDOE8q8Ju*AG<)IGR_k6j53XdKrX96-DuR_K8)VNH%l-k?OBqh@;$BA@4oW*Cdld7 z*iV^Q5XqUa?2tD#-BY-cRfV5*p)4ggo4iUq!s+O{4Y!QClQ~8sS9p;p{mS!cu60h3 zCw~Ka)YN2s7v@JA44SC~WUve2`=^7!Ak0iUkT!PY=hIiBjS-(I`H`Sm)KJ6cTlvwX z{M!yIv5w9#86Mu;h5;^d%x&LS?h&!^`2{f=Insd^c6$zpGs?k2RF6NTwqSm$%lL+{ zyX@8~iVb+_f7sx78aZLJdQ=8x2^JyZBwbv8$Hsd^oZ}^9g%;f&K@&CO%>jEW)U(v3 zu12r3>U>M8=c%&Rh7sX+CpajK@HBFqV*XV?*W>(j*u$&G>)6+Xn~KzYeVmVH7JDG$BfSpf3s&Q?6@2bD zroxyXxQf}v4C7RhJ$!Zza(JJRz(Paj5NBYe^1P3j+4#_5DOs2DT4=oQW>0-SnkcM_ z3ks9wg!zkHBL}EX5W~W?I_o9gb`is5jvq=Ne30CKh_UGO#qZVQLsFuH$x*h@cWY0C zjYIpX-wbo-3lE}l2U485CE$t6wNR;+82;);gxu8IpFB=LT=idS6qb1C>(prGeGr

mu=8c-f$G~bn}+E(YX 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 delta 5896 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 list = java.util.Arrays.asList(1, 2, 3); + Mosaic_IsPrimitive mip = Mosaic_IsPrimitive.make(list); + return mip.get_type().getName().equals("java.util.Arrays$ArrayList"); + } + + public Boolean test_extreme_primitive_values(Mosaic_IO io){ + Mosaic_IsPrimitive mipMax = Mosaic_IsPrimitive.make(Integer.MAX_VALUE); + Mosaic_IsPrimitive mipMin = Mosaic_IsPrimitive.make(Integer.MIN_VALUE); + Mosaic_IsPrimitive mipNaN = Mosaic_IsPrimitive.make(Double.NaN); + return mipMax.get_type().equals(int.class) + && mipMin.get_type().equals(int.class) + && mipNaN.get_type().equals(double.class); + } + } + + public static void main(String[] args){ + TestSuite suite = new Test_IsPrimitive().new TestSuite(); + int result = Mosaic_Testbench.run(suite); + System.exit(result); + } +} diff --git a/tester/log/log.txt b/tester/log/log.txt index 4885307..c3fad8a 100644 --- a/tester/log/log.txt +++ b/tester/log/log.txt @@ -20,3 +20,25 @@ Output: Intentional extraneous chars to stderr for testing. +2024-12-14T05:51:43.096Z [main] INFO c.R.Mosaic.Mosaic_Logger - +2024-12-14T05:51:43.094778420Z ----------------------------------------------------------- +Test: smoke_test_logging +Message: +This is a smoke test for logging. + +2024-12-14T05:51:43.496Z [main] INFO c.R.Mosaic.Mosaic_Logger - +2024-12-14T05:51:43.494998052Z ----------------------------------------------------------- +Test: test_failure_3 +Stream: stdout +Output: +Intentional extraneous chars to stdout for testing + + +2024-12-14T05:51:43.497Z [main] INFO c.R.Mosaic.Mosaic_Logger - +2024-12-14T05:51:43.497259959Z ----------------------------------------------------------- +Test: test_failure_4 +Stream: stderr +Output: +Intentional extraneous chars to stderr for testing. + + diff --git "a/tester/tool\360\237\226\211/bash_wrapper_list" "b/tester/tool\360\237\226\211/bash_wrapper_list" index 8d272b6..ac5f2f5 100755 --- "a/tester/tool\360\237\226\211/bash_wrapper_list" +++ "b/tester/tool\360\237\226\211/bash_wrapper_list" @@ -1,6 +1,9 @@ #!/bin/env bash script_afp=$(realpath "${BASH_SOURCE[0]}") +# each test listed here will receive a shell wrapper, and run_tests will +# include the test in the test run, in the order it appears in the list. + # input guards env_must_be="tester/tool🖉/env" if [ "$ENV" != "$env_must_be" ]; then @@ -16,5 +19,7 @@ echo\ Test_IO\ Test_Testbench\ Test_MockClass_0\ - Test_Util_proxy - + Test_Util_proxy\ + Test_IsPrimitive\ + Test_FunctionSignature\ + "" diff --git "a/tester/tool\360\237\226\211/env" "b/tester/tool\360\237\226\211/env" index f9626b5..d35674e 100644 --- "a/tester/tool\360\237\226\211/env" +++ "b/tester/tool\360\237\226\211/env" @@ -55,7 +55,7 @@ case "$MODE" in export CLASSPATH=\ "$BASE_CLASSPATH\ -:$REPO_HOME/tester/scratchpad +:$REPO_HOME/tester/scratchpad\ :$REPO_HOME/release/${PROJECT}.jar\ :$CLASSPATH" -- 2.20.1