kernel_memory_dump

NonSerializable Crawler

Jan 11th, 2016
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.13 KB | None | 0 0
  1. package test;
  2.  
  3. import java.io.Serializable;
  4. import java.lang.reflect.Field;
  5. import java.lang.reflect.Modifier;
  6. import java.util.Collection;
  7. import java.util.HashMap;
  8. import java.util.HashSet;
  9. import java.util.LinkedList;
  10.  
  11. import javax.swing.JComponent;
  12.  
  13. import workspace.Document;
  14. import workspace.Element;
  15. import workspace.Page;
  16. import workspace.Project;
  17. import workspace.Slot;
  18.  
  19. public class NonSerializableCrawler {
  20.     public static boolean crawlRecursively(Field field, HashSet<Class<?>> alreadyCrawled, HashMap<Field, HashSet<String>> badFields) {
  21.         if (alreadyCrawled.contains(field.getType())) {
  22.             return !badFields.keySet().contains(field);
  23.         }
  24.  
  25.         alreadyCrawled.add(field.getType());
  26.  
  27.         if (Modifier.isStatic(field.getModifiers())
  28.                 || Modifier.isTransient(field.getModifiers())
  29.                 || field.getType().isPrimitive()) {
  30.             return true;
  31.         } else if (Serializable.class.isAssignableFrom(field.getType())) {
  32.             boolean allGood = true;
  33.  
  34.             for (Field f : field.getType().getDeclaredFields()) {
  35.                 boolean isGood = crawlRecursively(f, alreadyCrawled, badFields);
  36.                 if (!isGood) {
  37.                     if (!badFields.containsKey(field)) {
  38.                         badFields.put(field, new HashSet<>());
  39.                     }
  40.                     badFields.get(field).add(f.getType().getSimpleName() + " " + f.getName());
  41.                     allGood = false;
  42.                 }
  43.             }
  44.  
  45.             return allGood;
  46.         } else {
  47.             if (!badFields.containsKey(field)) {
  48.                 badFields.put(field, new HashSet<>());
  49.             }
  50.  
  51.             return false;
  52.         }
  53.     }
  54.  
  55.     public static HashMap<Field, HashSet<String>> initiateCrawling(Collection<Class<?>> roots) {
  56.         HashMap<Field, HashSet<String>> badFields = new HashMap<>();
  57.  
  58.         for (Class<?> root : roots) {
  59.             for (Field f : root.getDeclaredFields()) {
  60.                 crawlRecursively(f, new HashSet<>(), badFields);
  61.             }
  62.         }
  63.  
  64.         return badFields;
  65.     }
  66.  
  67.     public static void main(String[] args) {
  68.         LinkedList<Class<?>> roots = new LinkedList<>();
  69.         roots.add(Project.class);
  70.         roots.add(Document.class);
  71.         roots.add(Page.class);
  72.         roots.add(Slot.class); // ADD YOUR CLASSES HERE.
  73.         roots.add(Element.class); // ADD YOUR CLASSES HERE.
  74.         HashMap<Field, HashSet<String>> badFields = initiateCrawling(roots);
  75.  
  76.         if (badFields.keySet().size() == 0) {
  77.             System.out.println("All fields are serializable (not having checked the given class(es) themselves).");
  78.         } else {
  79.             System.out.println("The following fields are not serializable in the class tree(s) given by " + roots + ":");
  80.         }
  81.  
  82.         for (Field field : badFields.keySet()) {
  83.             System.out.println("<UnSer> "
  84.                     + field.getType().getSimpleName() + " "
  85.                     + field.getName() + " ("
  86.                     + field.getDeclaringClass().getName() + ") => " + badFields.get(field));
  87.         }
  88.     }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment