I was reading an article on TheServerSide on ployglot programming on the Java platform. Some comments in the article refer to metaprogramming as the ability to generate code
This is just my personal opinion, which is probably the most liberal definition of metaprogramming.
I think it includes:
I think you can get there by using any of these and in combination: