== Why is this an issue? Calling ``++Class.newInstance++`` invokes the class' default constructor. Unfortunately, since it's not a direct call to the constructor, compile-time checking will be unable to detect the possibility. This means that your code will compile even if you haven't put the invocation in a ``++try++`` block. On the other hand, ``++Construtor.newInstance++`` handles exceptions by wrapping them in an ``++InvocationTargetException++`` and explicitly throwing them. This rule raises an issue when ``++Class.newInstance++`` is used to invoke a constructor that throws checked exceptions. === Noncompliant code example [source,java] ---- Foo f = Foo.class.newInstance(); // Noncompliant ---- === Compliant solution [source,java] ---- Foo f = Foo.class.getConstructor().newInstance(); ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message * Use "xxx.getConstructor().newInstance()" instead. === Highlighting ``++xxx.newInstance()++`` ''' == Comments And Links (visible only on this page) === on 14 Jul 2016, 18:01:06 Ann Campbell wrote: https://github.com/google/error-prone/blob/master/docs/bugpattern/ClassNewInstance.md === on 15 Jul 2016, 09:38:16 Freddy Mallet wrote: Hi [~ann.campbell.2], I would convert this "Code Smells Detection Rule" into a "Bugs Detection Rule" by making it raising an issue : IF AND ONLY IF the "class.newInstance()" leads to call a constructor having some checked exceptions. This is another example of the following pattern : instead of enforcing a coding practice allowing to avoid facing some bugs from time to time, let's provide a rule able to precisely detect those bugs. === on 15 Jul 2016, 14:40:14 Freddy Mallet wrote: And in that case [~ann.campbell.2], the title and description of the rule should also evolve. For the title, that might become: "'Class.newIntance(...)' should be not be called when the relating nullary constructor throws checked exceptions". endif::env-github,rspecator-view[]