Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.infinispan.commons.util;
  
  
  import java.io.File;
 import java.util.List;
 import java.util.Set;
Find infinispan classes utility
 
 public class ClassFinder {
    
    private static final Log log = LogFactory.getLog(ClassFinder.class); 
    
    public static final String PATH = SecurityActions.getProperty("java.class.path") + .
             + SecurityActions.getProperty("surefire.test.class.path");
 
    public static List<Class<?>> withAnnotationPresent(List<Class<?>> classesClass<? extends Annotationc) {
       List<Class<?>> clazzes = new ArrayList<Class<?>>(classes.size());
       for (Class<?> clazz : classes) {
          if (clazz.isAnnotationPresent(c)) {
             clazzes.add(clazz);
          }
       }
       return clazzes;
    }
    
    public static List<Class<?>> withAnnotationDeclared(List<Class<?>> classesClass<? extends Annotationc) {
       List<Class<?>> clazzes = new ArrayList<Class<?>>(classes.size());
       for (Class<?> clazz : classes) {
          if (clazz.isAnnotationPresent(c)) {
             Annotation[] declaredAnnots = clazz.getDeclaredAnnotations();
             for (Annotation declaredAnnot : declaredAnnots) {
                if (declaredAnnot.annotationType().isAssignableFrom(c)) {
                   clazzes.add(clazz);
                }
             }
          }
       }
       return clazzes;
    }
 
    public static List<Class<?>> isAssignableFrom(List<Class<?>> classesClass<?> clazz) {
       List<Class<?>> clazzes = new ArrayList<Class<?>>(classes.size());
       for (Class<?> c : classes) {
          if (clazz.isAssignableFrom(c)) {
             clazzes.add(c);
          }
       }
       return clazzes;
    }
 
    public static List<Class<?>> withAnnotationPresent(Class<? extends Annotationannthrows Exception {
       return withAnnotationPresent(infinispanClasses(), ann);
    }
 
    public static List<Class<?>> isAssignableFrom(Class<?> clazzthrows Exception {
       return isAssignableFrom(infinispanClasses(), clazz);
    }
 
    public static List<Class<?>> infinispanClasses() throws Exception {
       return infinispanClasses();
    }
 
    public static List<Class<?>> infinispanClasses(String javaClassPaththrows Exception {
       List<Filefiles = new ArrayList<File>();
 
       // either infinispan jar or a directory of output classes contains infinispan classes
       for (String path : javaClassPath.split(.)) {
          if (contains("infinispan"path)) {
             files.add(new File(path));
          }
       }
       .debugf("Looking for infinispan classes in %s"files);
       if (files.isEmpty()) {
          return InfinispanCollections.emptyList();
       } else {
          Set<Class<?>> classFiles = new HashSet<Class<?>>();
          for (File file : files) {
             classFiles.addAll(findClassesOnPath(file));
          }
          return new ArrayList<Class<?>>(classFiles);
       }
    }
 
    private static boolean contains(String whatString path) {
       if (path.contains(what)) return true;
       String[] list = new File(path).list();
       if (list == null//file
        return false;
      for (String childPathlist) {
         if (contains(whatchildPath)) return true;
      }
      return false;
   }
   private static List<Class<?>> findClassesOnPath(File path) {
      List<Class<?>> classes = new ArrayList<Class<?>>();
      Class<?> claz;
      if (path.isDirectory()) {
         List<FileclassFiles = new ArrayList<File>();
         dir(classFilespath);
         for (File cf : classFiles) {
            String clazz = null;
            try {
               clazz = toClassName(cf.getAbsolutePath());
               claz = Util.loadClassStrict(clazznull);
               classes.add(claz);
            } catch (NoClassDefFoundError ncdfe) {
               .warnf("%s has reference to a class %s that could not be loaded from classpath",
                         cf.getAbsolutePath(), ncdfe.getMessage());
            } catch (Throwable e) {
               // Catch all since we do not want skip iteration
               .warn("On path " + cf.getAbsolutePath() + " could not load class "clazze);
            }
         }
      } else {
         if (path.isFile() && path.getName().endsWith("jar") && path.canRead()) {
            JarFile jar;
            try {
               jar = new JarFile(path);
            } catch (Exception ex) {
               .warnf("Could not create jar file on path %s"path);
               return classes;
            }
            try {
               Enumeration<JarEntryen = jar.entries();
               while (en.hasMoreElements()) {
                  JarEntry entry = en.nextElement();
                  if (entry.getName().endsWith("class")) {
                     String clazz = null;
                     try {
                        clazz = toClassName(entry.getName());
                        claz = Util.loadClassStrict(clazznull);
                        classes.add(claz);
                     } catch (NoClassDefFoundError ncdfe) {
                        .warnf("%s has reference to a class %s that could not be loaded from classpath",
                                  entry.getName(), ncdfe.getMessage());
                     } catch (Throwable e) {
                        // Catch all since we do not want skip iteration
                        .warn("From jar path " + entry.getName() + " could not load class "clazze);
                     }
                  }
               }
            }
            finally {
               try {
                  jar.close();
               } catch (IOException e) {
                  .debugf(e"error closing jar file %s"jar);
               }
            }
         }
      }
      return classes;
   }
   private static void dir(List<FilefilesFile dir) {
      File[] entries = dir.listFiles();
      if (entries != null) {
         for (File entry : entries) {
            if (entry.isDirectory()) {
               dir(filesentry);
            } else if (entry.getName().endsWith("class")) {
               files.add(entry);
            }
         }
      }
   }
   private static String toClassName(String fileName) {
      return fileName.substring(fileName.lastIndexOf("org" + .), fileName.length() - 6).replace(.".");
   }
New to GrepCode? Check out our FAQ X