2525import java .lang .reflect .InvocationTargetException ;
2626import java .lang .reflect .Method ;
2727import java .util .Collection ;
28+ import java .util .HashMap ;
2829import java .util .List ;
2930import java .util .Map ;
3031
3839 * Created by gupele on 8/7/2016.
3940 */
4041public final class ReflectionUtils {
42+
43+ private static final Map <String , Class <?>> builtInMap = new HashMap <>();
44+
45+ static {
46+ addClass (com .microsoft .applicationinsights .channel .concrete .inprocess .InProcessTelemetryChannel .class );
47+ addClass (com .microsoft .applicationinsights .internal .channel .stdout .StdOutChannel .class );
48+
49+ addClass (com .microsoft .applicationinsights .internal .heartbeat .HeartBeatModule .class );
50+ addClass (com .microsoft .applicationinsights .internal .perfcounter .JvmPerformanceCountersModule .class );
51+ addClass (com .microsoft .applicationinsights .internal .perfcounter .ProcessPerformanceCountersModule .class );
52+
53+ addClass (com .microsoft .applicationinsights .extensibility .initializer .SdkVersionContextInitializer .class );
54+ addClass (com .microsoft .applicationinsights .extensibility .initializer .DeviceInfoContextInitializer .class );
55+
56+ addClass (com .microsoft .applicationinsights .extensibility .initializer .TimestampPropertyInitializer .class );
57+ addClass (com .microsoft .applicationinsights .extensibility .initializer .SequencePropertyInitializer .class );
58+ addClass (com .microsoft .applicationinsights .extensibility .initializer .docker .DockerContextInitializer .class );
59+
60+ addClass (com .microsoft .applicationinsights .internal .processor .MetricTelemetryFilter .class );
61+ addClass (com .microsoft .applicationinsights .internal .processor .RequestTelemetryFilter .class );
62+ addClass (com .microsoft .applicationinsights .internal .channel .samplingV2 .FixedRateSamplingTelemetryProcessor .class );
63+ addClass (com .microsoft .applicationinsights .internal .processor .SyntheticSourceFilter .class );
64+ addClass (com .microsoft .applicationinsights .internal .processor .PageViewTelemetryFilter .class );
65+ addClass (com .microsoft .applicationinsights .internal .processor .TelemetryEventFilter .class );
66+ addClass (com .microsoft .applicationinsights .internal .processor .TraceTelemetryFilter .class );
67+ }
68+
69+ static void addClass (Class <?> clazz ) {
70+ builtInMap .put (clazz .getCanonicalName (), clazz );
71+ }
72+
4173 /**
4274 * Creates an instance from its name. We suppress Java compiler warnings for Generic casting
4375 *
@@ -56,18 +88,14 @@ public static <T> T createInstance(String className, Class<T> interfaceClass) {
5688 return null ;
5789 }
5890
59- Class <?> clazz = Class .forName (className ).asSubclass (interfaceClass );
91+ Class <?> clazz = builtInMap .get (className );
92+ if (clazz == null ) {
93+ clazz = Class .forName (className ).asSubclass (interfaceClass );
94+ } else {
95+ clazz = clazz .asSubclass (interfaceClass );
96+ }
6097 T instance = (T )clazz .newInstance ();
61-
6298 return instance ;
63- } catch (ClassCastException e ) {
64- InternalLogger .INSTANCE .error ("Failed to create %s, Exception : %s" , className , ExceptionUtils .getStackTrace (e ));
65- } catch (ClassNotFoundException e ) {
66- InternalLogger .INSTANCE .error ("Failed to create %s, Exception : %s" , className , ExceptionUtils .getStackTrace (e ));
67- } catch (InstantiationException e ) {
68- InternalLogger .INSTANCE .error ("Failed to create %s, Exception : %s" , className , ExceptionUtils .getStackTrace (e ));
69- } catch (IllegalAccessException e ) {
70- InternalLogger .INSTANCE .error ("Failed to create %s, Exception : %s" , className , ExceptionUtils .getStackTrace (e ));
7199 } catch (Exception e ) {
72100 InternalLogger .INSTANCE .error ("Failed to create %s, Exception : %s" , className , ExceptionUtils .getStackTrace (e ));
73101 }
@@ -97,18 +125,15 @@ public static <T, A> T createInstance(String className, Class<T> interfaceClass
97125 return null ;
98126 }
99127
100- Class <?> clazz = Class .forName (className ).asSubclass (interfaceClass );
128+ Class <?> clazz = builtInMap .get (className );
129+ if (clazz == null ) {
130+ clazz = Class .forName (className ).asSubclass (interfaceClass );
131+ } else {
132+ clazz = clazz .asSubclass (interfaceClass );
133+ }
101134 Constructor <?> clazzConstructor = clazz .getConstructor (argumentClass );
102135 T instance = (T )clazzConstructor .newInstance (argument );
103136 return instance ;
104- } catch (ClassCastException e ) {
105- InternalLogger .INSTANCE .error ("Failed to create %s, Exception : %s" , className , ExceptionUtils .getStackTrace (e ));
106- } catch (ClassNotFoundException e ) {
107- InternalLogger .INSTANCE .error ("Failed to create %s, Exception : %s" , className , ExceptionUtils .getStackTrace (e ));
108- } catch (InstantiationException e ) {
109- InternalLogger .INSTANCE .error ("Failed to create %s, Exception : %s" , className , ExceptionUtils .getStackTrace (e ));
110- } catch (IllegalAccessException e ) {
111- InternalLogger .INSTANCE .error ("Failed to create %s, Exception : %s" , className , ExceptionUtils .getStackTrace (e ));
112137 } catch (Exception e ) {
113138 InternalLogger .INSTANCE .error ("Failed to create %s, Exception : %s" , className , ExceptionUtils .getStackTrace (e ));
114139 }
0 commit comments