Generative software product line development using variability-aware design patterns. (June 2017)