X-Git-Url: http://plrg.eecs.uci.edu/git/?p=jpf-core.git;a=blobdiff_plain;f=examples%2FReflection.java;h=312248fae527671f1f97bf6120965501d78ca650;hp=f446b4bf4644f9e8d27c36b618a11d6504ff28eb;hb=6fa5189f85c365a24c7d151a645eea147e693e8b;hpb=d9457edbede8c87b8f0af4f5eeb5be61d46f2501 diff --git a/examples/Reflection.java b/examples/Reflection.java index f446b4b..312248f 100644 --- a/examples/Reflection.java +++ b/examples/Reflection.java @@ -7,6 +7,10 @@ import java.util.List; import java.util.Map; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; + +import java.math.BigInteger; +import java.security.ProtectionDomain; public class Reflection { @@ -25,7 +29,7 @@ public class Reflection { private String sampleField; public Class setSampleField(Class clazz, - Class list, Class map, + Class list, Class map, Class clazz2, Class clazz3, List listString, Map mapString, Generic test, String sampleField, int one, short two, double three, Object obj) { @@ -49,21 +53,106 @@ public class Reflection { } public static void main(String[] args) { + + BigInteger bi = new BigInteger("-1"); + System.out.println(bi); + + /* TODO: Enumerate all methods in Class.class + Method[] methods = Class.class.getMethods(); + for(Method mth : methods) { + //System.out.println("==========================="); + //System.out.println("Method: " + mth.getName()); + Type[] parameters = mth.getGenericParameterTypes(); + for (int i = 0; i < parameters.length; i++) { + System.out.println(parameters[i]); + } + System.out.println(); + Type returnType = mth.getGenericReturnType(); + System.out.println(returnType + "\n"); + }*/ - /*Method[] methods = SampleClass.class.getMethods(); + Method[] methods = Collection.class.getMethods(); // Method[] methods = Class.class.getMethods(); Method method = null; for(Method meth : methods) { - if (meth.getName().equals("setSampleField")) { - method = meth; + System.out.println("==========================="); + //System.out.println("Method: " + meth.toString()); + Type[] parameters = meth.getGenericParameterTypes(); + for (int i = 0; i < parameters.length; i++) { + System.out.println(parameters[i]); + } + Type returnType = meth.getGenericReturnType(); + System.out.println(returnType); + System.out.println("==========================="); + } + + /* TODO: This is an excerpt of the BigInteger library + int radix = 10; + String val = "-1"; + int signum = 0; + final int[] mag; + + int cursor = 0, numDigits; + final int len = val.length(); + + if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) + throw new NumberFormatException("Radix out of range"); + if (len == 0) + throw new NumberFormatException("Zero length BigInteger"); + + // Check for at most one leading sign + int sign = 1; + int index1 = val.lastIndexOf('-'); + int index2 = val.lastIndexOf('+'); + if (index1 >= 0) { + if (index1 != 0 || index2 >= 0) { + throw new NumberFormatException("Illegal embedded sign character"); } + sign = -1; + cursor = 1; + } else if (index2 >= 0) { + if (index2 != 0) { + throw new NumberFormatException("Illegal embedded sign character"); + } + cursor = 1; } - Type[] parameters = method.getGenericParameterTypes(); - //Type[] parameters = methods[0].getGenericParameterTypes(); - for (int i = 0; i < parameters.length; i++) { - System.out.println(parameters[i]); - } - System.out.println();*/ + System.out.println(cursor); + if (cursor == len) + throw new NumberFormatException("Zero length BigInteger"); + + // Skip leading zeros and compute number of digits in magnitude + while (cursor < len && + Character.digit(val.charAt(cursor), radix) == 0) { + cursor++; + } + + if (cursor == len) { + signum = 0; + //mag = ZERO.mag; + //mag = null; + return; + } + + numDigits = len - cursor; + signum = sign; + + long numBits = ((numDigits * bitsPerDigit[radix]) >>> 10) + 1; + if (numBits + 31 >= (1L << 32)) { + System.out.println("Overflow!"); + } + int numWords = (int) (numBits + 31) >>> 5; + int[] magnitude = new int[numWords]; + + // Process first (potentially short) digit group + int firstGroupLen = numDigits % digitsPerInt[radix]; + if (firstGroupLen == 0) + firstGroupLen = digitsPerInt[radix]; + int cursor2 = cursor + firstGroupLen; + String group = val.substring(cursor, cursor2); + magnitude[numWords - 1] = Integer.parseInt(group, radix); + if (magnitude[numWords - 1] < 0) + throw new NumberFormatException("Illegal digit");*/ + /*Type superCls = Generic.class.getGenericSuperclass(); //Type superCls = String.class.getGenericSuperclass(); System.out.println(superCls); @@ -73,19 +162,26 @@ public class Reflection { System.out.println(interfaces[i]); }*/ - Method[] methods = SampleClass.class.getMethods(); - Method method = null; - for(Method mth : methods) { - if (mth.getName().equals("setSampleField")) { - method = mth; - } + /* + Method[] methods = Collection.class.getMethods(); + Method method = null; + for(Method mth : methods) { + if (mth.getName().equals("toArray")) { + //if (mth.getName().equals("isAssignableFrom")) { + //if (mth.getName().equals("getSuperclass")) { + method = mth; + break; } + } Type[] parameters = method.getGenericParameterTypes(); //Type[] parameters = methods[0].getGenericParameterTypes(); for (int i = 0; i < parameters.length; i++) { System.out.println(parameters[i]); } System.out.println(); + Type returnType = method.getGenericReturnType(); + System.out.println(returnType);*/ + /*Class[] parameterTypes = methods[0].getParameterTypes(); for(Class parameterType: parameterTypes){ System.out.println(parameterType.getName()); @@ -105,9 +201,9 @@ public class Reflection { System.out.println(bound); } System.out.println();*/ - Type returnType = method.getGenericReturnType(); - System.out.println(returnType); + //ProtectionDomain pd = Class.class.getProtectionDomain(); + //System.out.println(pd); } }