1 /* 2 * Copyright (C) 2021 The Dagger Authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package dagger.hilt.android.internal.testing; 18 19 import java.lang.reflect.InvocationTargetException; 20 21 /** Creates a test's early component. */ 22 public abstract class EarlySingletonComponentCreator { 23 private static final String EARLY_SINGLETON_COMPONENT_CREATOR_IMPL = 24 "dagger.hilt.android.internal.testing.EarlySingletonComponentCreatorImpl"; 25 createComponent()26 static Object createComponent() { 27 try { 28 return Class.forName(EARLY_SINGLETON_COMPONENT_CREATOR_IMPL) 29 .asSubclass(EarlySingletonComponentCreator.class) 30 .getDeclaredConstructor() 31 .newInstance() 32 .create(); 33 } catch (ClassNotFoundException 34 | NoSuchMethodException 35 | IllegalAccessException 36 | InstantiationException 37 | InvocationTargetException e) { 38 throw new RuntimeException( 39 "The EarlyComponent was requested but does not exist. Check that you have annotated " 40 + "your test class with @HiltAndroidTest and that the processor is running over your " 41 + "test.", 42 e); 43 } 44 } 45 46 /** Creates the early test component. */ create()47 abstract Object create(); 48 } 49