@SuppressForbidden(reason="Required by jdbc") public Logger getParentLogger() { return null; }
@SuppressForbidden(reason = "For currentTimeMillis, expiry time depends on external data (should it?)") public boolean isExpired() { return (expireAt < System.currentTimeMillis()); }
@Override @SuppressForbidden(reason = "Needed to provide timestamps based on currentTimeMillis.") public long getTimeNs() { return TimeUnit.NANOSECONDS.convert(System.currentTimeMillis(), TimeUnit.MILLISECONDS); }
@SuppressForbidden(reason = "For currentTimeMillis, expiry time depends on external data (should it?)") public static String makeExpiryAt(long timeMsFromNow) { return String.valueOf(System.currentTimeMillis() + timeMsFromNow); }
@SuppressForbidden(reason="Specific to Log4J2") public static class Configurer {
@SuppressForbidden(reason = "Uses context class loader as a workaround to inject correct classloader to 3rd party libs") private static <T> T withContextClassLoader(ClassLoader loader, Supplier<T> action) { Thread ct = Thread.currentThread(); ClassLoader prev = ct.getContextClassLoader(); try { ct.setContextClassLoader(loader); return action.get(); } finally { ct.setContextClassLoader(prev); } }
@SuppressForbidden(reason = "class customizes ThreadPoolExecutor so it can be used instead") public static class MDCAwareThreadPoolExecutor extends ThreadPoolExecutor {
@SuppressForbidden(reason = "class customizes ThreadPoolExecutor so it can be used instead") public static class MDCAwareThreadPoolExecutor extends ThreadPoolExecutor {
@Override @SuppressForbidden(reason = "Implements deprecated method") public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException { return this.getBigDecimal(this.resultSetMetaData.getColumnLabel(columnIndex), scale); }
@SuppressForbidden(reason = "Usage of outdated locale parsing with Locale#toString() because of backwards compatibility") public DateFormatEvaluator() { for (Locale locale : Locale.getAvailableLocales()) { availableLocales.put(locale.toString(), locale); } for (String tz : TimeZone.getAvailableIDs()) { availableTimezones.add(tz); } }
@SuppressForbidden(reason = "Hack for Zookeper needs access to private methods.") private Void closeZookeeperChannel() { final ClientCnxn cnxn = getConnection(); synchronized (cnxn) { try { final Field sendThreadFld = cnxn.getClass().getDeclaredField("sendThread"); sendThreadFld.setAccessible(true); Object sendThread = sendThreadFld.get(cnxn); if (sendThread != null) { Method method = sendThread.getClass().getDeclaredMethod("testableCloseSocket"); method.setAccessible(true); try { method.invoke(sendThread); } catch (InvocationTargetException e) { // is fine } } } catch (Exception e) { throw new RuntimeException("Closing Zookeeper send channel failed.", e); } } return null; // Void } };
@SuppressForbidden(reason = "Needs access to possibly private @Field annotated fields/methods") private List<DocField> collectInfo(Class clazz) { List<DocField> fields = new ArrayList<>(); Class superClazz = clazz; List<AccessibleObject> members = new ArrayList<>(); while (superClazz != null && superClazz != Object.class) { members.addAll(Arrays.asList(superClazz.getDeclaredFields())); members.addAll(Arrays.asList(superClazz.getDeclaredMethods())); superClazz = superClazz.getSuperclass(); } boolean childFieldFound = false; for (AccessibleObject member : members) { if (member.isAnnotationPresent(Field.class)) { AccessController.doPrivileged((PrivilegedAction<Void>) () -> { member.setAccessible(true); return null; }); DocField df = new DocField(member); if (df.child != null) { if (childFieldFound) throw new BindingException(clazz.getName() + " cannot have more than one Field with child=true"); childFieldFound = true; } fields.add(df); } } return fields; }
@SuppressForbidden(reason = "Usage of outdated locale parsing with Locale#toString() because of backwards compatibility") private Locale getLocale(String name) { if (name == null) { return Locale.ROOT; } for (final Locale l : Locale.getAvailableLocales()) { if(name.equals(l.toString()) || name.equals(l.getDisplayName(Locale.ROOT))) { return locale; } } try { return new Locale.Builder().setLanguageTag(name).build(); } catch (IllformedLocaleException ex) { throw new DataImportHandlerException(SEVERE, "Unsupported locale for PropertyWriter: " + name); } }
@SuppressForbidden(reason = "Usage of outdated locale parsing with Locale#toString() because of backwards compatibility") private Locale getLocale(String name) { if (name == null) { return Locale.ROOT; } for (Locale locale : Locale.getAvailableLocales()) { if (locale.toString().equals(name)) { return locale; } } try { return new Locale.Builder().setLanguageTag(name).build(); } catch (IllformedLocaleException ex) { throw new MorphlineCompilationException("Malformed / non-existent locale: " + name, getConfig(), ex); } } }
@SuppressForbidden(reason = "Using the Level class from log4j2 directly") private static Map<String, Level> savedClassLogLevels = new HashMap<>();