private static ModuleInfo readModuleInformation(final String moduleName,final File jarFile,Overrides overrides){
  ClassFile moduleInfo=readModuleInfo(moduleName,jarFile);
  if (moduleInfo == null)   return null;
  Annotation ai=ClassFileUtil.findAnnotation(moduleInfo,MODULE_ANNOTATION);
  if (ai == null)   return null;
  final String version=(String)ClassFileUtil.getAnnotationValue(moduleInfo,ai,"version");
  if (version == null)   return null;
  final Object[] dependencies=(Object[])ClassFileUtil.getAnnotationValue(moduleInfo,ai,"dependencies");
  final Set<ModuleDependencyInfo> infos=getDependencies(moduleInfo,dependencies,moduleName,version,overrides);
  ModuleInfo ret=new ModuleInfo(moduleName,version,null,infos);
  if (overrides != null)   ret=overrides.applyOverrides(moduleName,version,ret);
  return ret;
}

private static ModuleInfo readModuleInformation ( final String moduleName , final File jarFile , Overrides overrides ) { ClassFile moduleInfo = readModuleInfo ( moduleName , jarFile ) ; if ( moduleInfo == null ) return null ; Annotation ai = ClassFileUtil . findAnnotation ( moduleInfo , MODULE_ANNOTATION ) ; if ( ai == null ) return null ; final String version = ( String ) ClassFileUtil . getAnnotationValue ( moduleInfo , ai , "version" ) ; if ( version == null ) return null ; final Object [ ] dependencies = ( Object [ ] ) ClassFileUtil . getAnnotationValue ( moduleInfo , ai , "dependencies" ) ; final Set < ModuleDependencyInfo > infos = getDependencies ( moduleInfo , dependencies , moduleName , version , overrides ) ; ModuleInfo ret = new ModuleInfo ( moduleName , version , null , infos ) ; if ( overrides != null ) ret = overrides . applyOverrides ( moduleName , version , ret ) ; return ret ; }
read module info from bytecode .
