Fixing getGenericReturnType to recognize the GenericArrayTypeImpl and ParameterizedTy...
[jpf-core.git] / examples / Reflection.java
index 538bcd1dc3aa54f1ac3c8ab453bf0ae2c816fb29..b32715832912b6b30b60dc1e25510a89f5c6cb26 100644 (file)
@@ -1,6 +1,7 @@
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
+import java.io.Serializable;
 
 import java.util.List;
 import java.util.Map;
@@ -9,23 +10,30 @@ import java.util.Arrays;
 
 public class Reflection {
 
-       class GenericShort<TUVW,ABCD> {
-       }
+    interface GenericSuperShort<XYZ> {
 
-       class Generic<TUVW,ABCD,KLM,NOP> {
-       
-       }
+    }
 
-       class SampleClass<VWXZ> {
-          private String sampleField;
+    class GenericShort<TUVW,ABCD> {
+    }
 
-          public Generic<Integer,String,Double,Short> setSampleField(Class<VWXZ> clazz, List<String> listString, Map<Integer,String> mapString,
-                               Generic<Integer,String,Double,Short> test,
-                               String sampleField, int one, short two, double three, Object obj) {
-                 this.sampleField = sampleField; 
-                 return test;
-          }
-          
+    class Generic<TUVW,ABCD,KLM,NOP,XYZ> extends GenericShort<TUVW,ABCD> implements GenericSuperShort<XYZ>, Serializable {
+
+    }
+
+    class SampleClass<VWXZ> {
+        private String sampleField;
+
+        public Class<?> setSampleField(Class<?> clazz,
+                       Class<? extends List> list, Class<? super Map> map,
+                       List<String> listString, Map<Integer,String> mapString, 
+                       Generic<Integer,String,Double,Short,Float> test, 
+                       String sampleField, int one, short two, double three, Object obj) {
+            
+                       this.sampleField = sampleField;
+            return clazz;
+        }
+                
           
           /*public String getSampleField() {
                  return sampleField;
@@ -42,7 +50,7 @@ public class Reflection {
 
    public static void main(String[] args) {
 
-      Method[] methods = SampleClass.class.getMethods();
+      /*Method[] methods = SampleClass.class.getMethods();
       //  Method[] methods = Class.class.getMethods();
         Method method = null;
         for(Method meth : methods) {
@@ -55,6 +63,30 @@ public class Reflection {
       for (int i = 0; i < parameters.length; i++) {
          System.out.println(parameters[i]);
       }
+      System.out.println();*/
+      /*Type superCls = Generic.class.getGenericSuperclass();
+      //Type superCls = String.class.getGenericSuperclass();
+      System.out.println(superCls);
+        System.out.println();
+        Type[] interfaces = Generic.class.getGenericInterfaces();
+        for (int i = 0; i < interfaces.length; i++) {
+            System.out.println(interfaces[i]);
+        }*/
+      
+         Method[] methods = Class.class.getMethods();
+         Method method = null;
+      for(Method mth : methods) {
+        //if (mth.getName().equals("getConstructor")) {
+        //if (mth.getName().equals("isAssignableFrom")) {
+        if (mth.getName().equals("getTypeParameters")) {
+           method = mth;
+        }
+      }
+      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();
       /*Class[] parameterTypes = methods[0].getParameterTypes();
       for(Class parameterType: parameterTypes){
@@ -74,10 +106,10 @@ public class Reflection {
       for (Type bound : bounds) {
           System.out.println(bound);
       }
-      System.out.println();
-      Type returnType = methods[0].getGenericReturnType();
+      System.out.println();*/
+      Type returnType = method.getGenericReturnType();
       System.out.println(returnType);
-         */
+         
    }
 }