59 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.fragment.app;
 | |
| 
 | |
| import androidx.collection.SimpleArrayMap;
 | |
| import androidx.fragment.app.Fragment;
 | |
| import java.lang.reflect.InvocationTargetException;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class FragmentFactory {
 | |
|     private static final SimpleArrayMap<ClassLoader, SimpleArrayMap<String, Class<?>>> sClassCacheMap = new SimpleArrayMap<>();
 | |
| 
 | |
|     private static Class<?> loadClass(ClassLoader classLoader, String str) throws ClassNotFoundException {
 | |
|         SimpleArrayMap<ClassLoader, SimpleArrayMap<String, Class<?>>> simpleArrayMap = sClassCacheMap;
 | |
|         SimpleArrayMap<String, Class<?>> simpleArrayMap2 = simpleArrayMap.get(classLoader);
 | |
|         if (simpleArrayMap2 == null) {
 | |
|             simpleArrayMap2 = new SimpleArrayMap<>();
 | |
|             simpleArrayMap.put(classLoader, simpleArrayMap2);
 | |
|         }
 | |
|         Class<?> cls = simpleArrayMap2.get(str);
 | |
|         if (cls != null) {
 | |
|             return cls;
 | |
|         }
 | |
|         Class<?> cls2 = Class.forName(str, false, classLoader);
 | |
|         simpleArrayMap2.put(str, cls2);
 | |
|         return cls2;
 | |
|     }
 | |
| 
 | |
|     static boolean isFragmentClass(ClassLoader classLoader, String str) {
 | |
|         try {
 | |
|             return Fragment.class.isAssignableFrom(loadClass(classLoader, str));
 | |
|         } catch (ClassNotFoundException unused) {
 | |
|             return false;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static Class<? extends Fragment> loadFragmentClass(ClassLoader classLoader, String str) {
 | |
|         try {
 | |
|             return loadClass(classLoader, str);
 | |
|         } catch (ClassCastException e) {
 | |
|             throw new Fragment.InstantiationException("Unable to instantiate fragment " + str + ": make sure class is a valid subclass of Fragment", e);
 | |
|         } catch (ClassNotFoundException e2) {
 | |
|             throw new Fragment.InstantiationException("Unable to instantiate fragment " + str + ": make sure class name exists", e2);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public Fragment instantiate(ClassLoader classLoader, String str) {
 | |
|         try {
 | |
|             return loadFragmentClass(classLoader, str).getConstructor(new Class[0]).newInstance(new Object[0]);
 | |
|         } catch (IllegalAccessException e) {
 | |
|             throw new Fragment.InstantiationException("Unable to instantiate fragment " + str + ": make sure class name exists, is public, and has an empty constructor that is public", e);
 | |
|         } catch (InstantiationException e2) {
 | |
|             throw new Fragment.InstantiationException("Unable to instantiate fragment " + str + ": make sure class name exists, is public, and has an empty constructor that is public", e2);
 | |
|         } catch (NoSuchMethodException e3) {
 | |
|             throw new Fragment.InstantiationException("Unable to instantiate fragment " + str + ": could not find Fragment constructor", e3);
 | |
|         } catch (InvocationTargetException e4) {
 | |
|             throw new Fragment.InstantiationException("Unable to instantiate fragment " + str + ": calling Fragment constructor caused an exception", e4);
 | |
|         }
 | |
|     }
 | |
| }
 |