package com.bugsnag.android.repackaged.dslplatform.json; import java.lang.reflect.InvocationTargetException; import java.util.*; class ExternalConverterAnalyzer { private final Set lookedUpClasses = new HashSet(); private final ClassLoader[] classLoaders; ExternalConverterAnalyzer(Collection classLoaders) { this.classLoaders = classLoaders.toArray(new ClassLoader[0]); } synchronized boolean tryFindConverter(Class manifest, DslJson dslJson) { final String className = manifest.getName(); if (!lookedUpClasses.add(className)) return false; String[] converterClassNames = resolveExternalConverterClassNames(className); for (ClassLoader cl : classLoaders) { for (String ccn : converterClassNames) { try { Class converterClass = cl.loadClass(ccn); if (!Configuration.class.isAssignableFrom(converterClass)) continue; Configuration converter = (Configuration) converterClass.getDeclaredConstructor().newInstance(); converter.configure(dslJson); return true; } catch (ClassNotFoundException ignored) { } catch (IllegalAccessException ignored) { } catch (InstantiationException ignored) { } catch (InvocationTargetException e) { } catch (NoSuchMethodException e) { } } } return false; } private String[] resolveExternalConverterClassNames(final String fullClassName) { int dotIndex = fullClassName.lastIndexOf('.'); if (dotIndex == -1) { return new String[]{String.format("_%s_DslJsonConverter", fullClassName)}; } String packageName = fullClassName.substring(0, dotIndex); String className = fullClassName.substring(dotIndex + 1); return new String[]{ String.format("%s._%s_DslJsonConverter", packageName, className), String.format("dsl_json.%s._%s_DslJsonConverter", packageName, className), String.format("dsl_json.%s.%sDslJsonConverter", packageName, className)}; } }