Program synthesis is a very active field of research and many AI-based methods have been proposed in the last decades, IMHO what most systems lack is the applicability to real-world programming languages and use cases though.
Having worked on static program analysis, I know that even our current ability to understand and reason about existing programs is still very limited. A main reason for this is that most real-world systems are composed of many parts that are not easily specifiable under a single paradigm (e.g. templates, database code, configuration files).
To build a usable AI-based programming system, we will need:
* A description languge that is able to model ALL aspects of a given real-world system under a single paradigm
* A system to analyze and understand the artefacts produced by the above system
* A way to generate real-world code from the specification above, including a way to "fill in the blanks" that the user did not specify (as leaving out the details the whole point of such a system)
* A way to test the generated code against the specifications provided by the user and further "reasonable" assumptions, which will be needed as the specifications by the user will not be complete, see above
* A way to guide this process towards a reasonable program through user feedback within a reasonably small number of steps
While none of these things are impossible, implementing them is a significant challenge with a lot of unknowns for which we don't have good solutions yet.
I therefore think the first AI-based systems which we'll see in the coming years will be limited to specific problem domains (e.g. data analysis, logic programming) for which we can more easily build a system as the above.