From 0d7c37b0bf79a5e1f6e453ba07e385c0a3692e97 Mon Sep 17 00:00:00 2001 From: Sam Ruby Date: Mon, 6 Dec 1999 05:00:40 +0000 Subject: first pass at method overloading --- ext/java/reflect.java | 94 ++++++++++++++++++++++++++++++++++++++++++++--- ext/rpc/java/reflect.java | 94 ++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 176 insertions(+), 12 deletions(-) diff --git a/ext/java/reflect.java b/ext/java/reflect.java index f4b3829d3a..f4ec06d980 100644 --- a/ext/java/reflect.java +++ b/ext/java/reflect.java @@ -19,7 +19,7 @@ package net.php; import java.lang.reflect.*; -import java.util.ResourceBundle; +import java.util.*; import java.beans.*; class reflect { @@ -114,6 +114,83 @@ class reflect { } } + // + // Select the best match from a list of methods + // + private static Method select(Vector methods, Object args[]) { + if (methods.size() == 1) return (Method) methods.firstElement(); + + Method selected = null; + int best = Integer.MAX_VALUE; + + for (Enumeration e = methods.elements(); e.hasMoreElements(); ) { + Method method = (Method)e.nextElement(); + int weight=0; + Class parms[] = method.getParameterTypes(); + for (int i=0; i0) + weight+=((String)args[i]).length(); + else + weight+=9999; + } else { + weight+=9999; + } + } else { + weight+=9999; + } + } + + if (weight < best) { + if (weight == 0) return method; + best = weight; + selected = method; + } + } + + return selected; + } + + // + // Select the best match from a list of methods + // + private static Object[] coerce(Method method, Object args[]) { + Object result[] = args; + Class parms[] = method.getParameterTypes(); + for (int i=0; i0) + weight+=((String)args[i]).length(); + else + weight+=9999; + } else { + weight+=9999; + } + } else { + weight+=9999; + } + } + + if (weight < best) { + if (weight == 0) return method; + best = weight; + selected = method; + } + } + + return selected; + } + + // + // Select the best match from a list of methods + // + private static Object[] coerce(Method method, Object args[]) { + Object result[] = args; + Class parms[] = method.getParameterTypes(); + for (int i=0; i