@@ -42,7 +42,7 @@ public class CPDConfiguration extends AbstractConfiguration {
4242 public static final String DEFAULT_LANGUAGE = "java" ;
4343 public static final String DEFAULT_RENDERER = "text" ;
4444
45- private static final Map <String , Class <? extends CPDRenderer >> RENDERERS = new HashMap <>();
45+ private static final Map <String , Class <?>> RENDERERS = new HashMap <>();
4646
4747 static {
4848 RENDERERS .put (DEFAULT_RENDERER , SimpleRenderer .class );
@@ -175,86 +175,65 @@ public void postContruct() {
175175 setRendererName (DEFAULT_RENDERER );
176176 }
177177 if (getRenderer () == null && getCPDRenderer () == null ) {
178- try {
179- try {
180- setRenderer (getCPDReportRendererFromString (getRendererName (), getEncoding ()));
181- } catch (ClassCastException e ) {
182- // The renderer class configured is not using the new CPDReportRenderer interface...
183- setCPDRenderer (getCPDRendererFromString (getRendererName (), getEncoding ()));
184- }
185- } catch (ClassCastException e ) {
186- // The renderer class configured is not using the new CPDRenderer interface...
187- setRenderer (getRendererFromString (getRendererName (), getEncoding ()));
178+ Object renderer = createRendererByName (getRendererName (), getEncoding ());
179+ String className = getRendererName ();
180+
181+ if (renderer instanceof CPDReportRenderer ) {
182+ setRenderer ((CPDReportRenderer ) renderer );
183+ } else if (renderer instanceof CPDRenderer ) {
184+ setCPDRenderer ((CPDRenderer ) renderer );
185+ } else if (renderer instanceof Renderer ) {
186+ setRenderer ((Renderer ) renderer );
187+ } else {
188+ System .err .println ("Class '" + className + "' is not a supported renderer, defaulting to SimpleRenderer." );
189+ setRenderer (new SimpleRenderer ());
188190 }
189191 }
190192 }
191193
192- /**
193- * @deprecated Internal API
194- */
195- @ Deprecated
196- @ InternalApi
197- public static Renderer getRendererFromString (String name , String encoding ) {
198- String clazzname = name ;
199- if (clazzname == null || "" .equals (clazzname )) {
200- clazzname = DEFAULT_RENDERER ;
194+ private static Object createRendererByName (String name , String encoding ) {
195+ if (name == null || "" .equals (name )) {
196+ name = DEFAULT_RENDERER ;
201197 }
202- @ SuppressWarnings ("unchecked" ) // Safe, all standard implementations implement both interfaces
203- Class <? extends Renderer > clazz = (Class <? extends Renderer >) RENDERERS .get (clazzname .toLowerCase (Locale .ROOT ));
204- if (clazz == null ) {
198+ Class <?> rendererClass = RENDERERS .get (name .toLowerCase (Locale .ROOT ));
199+ if (rendererClass == null ) {
205200 try {
206- clazz = Class .forName (clazzname ). asSubclass ( Renderer . class );
201+ rendererClass = Class .forName (name );
207202 } catch (ClassNotFoundException e ) {
208203 System .err .println ("Can't find class '" + name + "', defaulting to SimpleRenderer." );
209- clazz = SimpleRenderer .class ;
204+ rendererClass = SimpleRenderer .class ;
210205 }
211206 }
207+
208+ Object renderer = null ;
212209 try {
213- Renderer renderer = clazz .getDeclaredConstructor ().newInstance ();
210+ renderer = rendererClass .getDeclaredConstructor ().newInstance ();
214211 setRendererEncoding (renderer , encoding );
215- return renderer ;
216212 } catch (Exception e ) {
217213 System .err .println ("Couldn't instantiate renderer, defaulting to SimpleRenderer: " + e );
218- return new SimpleRenderer ();
214+ renderer = new SimpleRenderer ();
219215 }
216+ return renderer ;
220217 }
221218
222219 /**
223220 * @deprecated Internal API
224221 */
225222 @ Deprecated
226223 @ InternalApi
227- public static CPDRenderer getCPDRendererFromString (String name , String encoding ) {
228- String clazzname = name ;
229- if (clazzname == null || "" .equals (clazzname )) {
230- clazzname = DEFAULT_RENDERER ;
231- }
232- Class <? extends CPDRenderer > clazz = RENDERERS .get (clazzname .toLowerCase (Locale .ROOT ));
233- if (clazz == null ) {
234- try {
235- clazz = Class .forName (clazzname ).asSubclass (CPDRenderer .class );
236- } catch (ClassNotFoundException e ) {
237- System .err .println ("Can't find class '" + name + "', defaulting to SimpleRenderer." );
238- clazz = SimpleRenderer .class ;
239- }
240- }
241- try {
242- CPDRenderer renderer = clazz .getDeclaredConstructor ().newInstance ();
243- setRendererEncoding (renderer , encoding );
244- return renderer ;
245- } catch (Exception e ) {
246- System .err .println ("Couldn't instantiate renderer, defaulting to SimpleRenderer: " + e );
247- return new SimpleRenderer ();
248- }
224+ public static Renderer getRendererFromString (String name , String encoding ) {
225+ // will throw a ClassCastException if the renderer is of wrong type
226+ return (Renderer ) createRendererByName (name , encoding );
249227 }
250228
251- static CPDReportRenderer getCPDReportRendererFromString (String name , String encoding ) {
252- final CPDRenderer renderer = getCPDRendererFromString (name , encoding );
253- if (renderer instanceof CPDReportRenderer ) {
254- return (CPDReportRenderer ) renderer ;
255- } else {
256- return new CPDRendererAdapter (renderer );
257- }
229+ /**
230+ * @deprecated Internal API
231+ */
232+ @ Deprecated
233+ @ InternalApi
234+ public static CPDRenderer getCPDRendererFromString (String name , String encoding ) {
235+ // will throw a ClassCastException if the renderer is of wrong type
236+ return (CPDRenderer ) createRendererByName (name , encoding );
258237 }
259238
260239 private static void setRendererEncoding (Object renderer , String encoding )
@@ -417,6 +396,7 @@ public boolean accept(File dir, String name) {
417396 public void setRenderer (Renderer renderer ) {
418397 this .renderer = renderer ;
419398 this .cpdRenderer = null ;
399+ this .cpdReportRenderer = null ;
420400 }
421401
422402 /**
@@ -426,8 +406,9 @@ public void setRenderer(Renderer renderer) {
426406 @ Deprecated
427407 @ InternalApi
428408 public void setCPDRenderer (CPDRenderer renderer ) {
429- this .cpdRenderer = renderer ;
430409 this .renderer = null ;
410+ this .cpdRenderer = renderer ;
411+ this .cpdReportRenderer = new CPDRendererAdapter (renderer );
431412 }
432413
433414 void setRenderer (CPDReportRenderer renderer ) {
0 commit comments