Пример #1
0
 /**
  * Filter the stacktrace elements with only interesting one.
  *
  * @param throwable throwable
  * @return {@link Throwable} instance with interested stacktrace elements.
  */
 public static Throwable sanitize(Throwable throwable) {
   if (throwable instanceof NGrinderRuntimeException) {
     if (((NGrinderRuntimeException) throwable).isSanitized()) {
       return throwable;
     }
   }
   Throwable t = throwable;
   while (t != null) {
     // Note that this getBoolean access may well be synced...
     StackTraceElement[] trace = t.getStackTrace();
     List<StackTraceElement> newTrace = CollectionUtils.newArrayList();
     for (StackTraceElement stackTraceElement : trace) {
       if (isApplicationClass(stackTraceElement.getClassName())) {
         newTrace.add(stackTraceElement);
       }
     }
     StackTraceElement[] clean = new StackTraceElement[newTrace.size()];
     newTrace.toArray(clean);
     t.setStackTrace(clean);
     t = t.getCause();
   }
   if (throwable instanceof NGrinderRuntimeException) {
     ((NGrinderRuntimeException) throwable).setSanitized(true);
   }
   return throwable;
 }
  public static ArrayList<DictionaryInfo> getCurrentDictionaryFileNameAndVersionInfo(
      final Context context) {
    final ArrayList<DictionaryInfo> dictList = CollectionUtils.newArrayList();

    // Retrieve downloaded dictionaries
    final File[] directoryList = getCachedDirectoryList(context);
    if (null != directoryList) {
      for (final File directory : directoryList) {
        final String localeString = getWordListIdFromFileName(directory.getName());
        File[] dicts = BinaryDictionaryGetter.getCachedWordLists(localeString, context);
        for (final File dict : dicts) {
          final String wordListId = getWordListIdFromFileName(dict.getName());
          if (!DictionaryInfoUtils.isMainWordListId(wordListId)) continue;
          final Locale locale = LocaleUtils.constructLocaleFromString(localeString);
          final AssetFileAddress fileAddress = AssetFileAddress.makeFromFile(dict);
          final DictionaryInfo dictionaryInfo = createDictionaryInfoFromFileAddress(fileAddress);
          // Protect against cases of a less-specific dictionary being found, like an
          // en dictionary being used for an en_US locale. In this case, the en dictionary
          // should be used for en_US but discounted for listing purposes.
          if (!dictionaryInfo.mLocale.equals(locale)) continue;
          addOrUpdateDictInfo(dictList, dictionaryInfo);
        }
      }
    }

    // Retrieve files from assets
    final Resources resources = context.getResources();
    final AssetManager assets = resources.getAssets();
    for (final String localeString : assets.getLocales()) {
      final Locale locale = LocaleUtils.constructLocaleFromString(localeString);
      final int resourceId =
          DictionaryInfoUtils.getMainDictionaryResourceIdIfAvailableForLocale(
              context.getResources(), locale);
      if (0 == resourceId) continue;
      final AssetFileAddress fileAddress =
          BinaryDictionaryGetter.loadFallbackResource(context, resourceId);
      final DictionaryInfo dictionaryInfo = createDictionaryInfoFromFileAddress(fileAddress);
      // Protect against cases of a less-specific dictionary being found, like an
      // en dictionary being used for an en_US locale. In this case, the en dictionary
      // should be used for en_US but discounted for listing purposes.
      if (!dictionaryInfo.mLocale.equals(locale)) continue;
      addOrUpdateDictInfo(dictList, dictionaryInfo);
    }

    return dictList;
  }