* Performs the following transformations:
* C c = (C)(B)(A)(B)new C() --> C c = (C)(B)newC() --> C c = new C()
* (Optimizing downcasts as A a = (A)(B)(new A()) --> A a = new A() can
* Performs the following transformations:
* C c = (C)(B)(A)(B)new C() --> C c = (C)(B)newC() --> C c = new C()
* (Optimizing downcasts as A a = (A)(B)(new A()) --> A a = new A() can